$btndiv = $("#btndiv"); $btndiv.on("click", "button.btn", function () { var $this = $(this); var pid = $this.attr("id"); });
<div id="btndiv"> <button id="btn1" data-pid="1" class="btn btn-default btn-primary btn-test">按钮</button> <p></p> <button id="btn2" data-pid="2" class="btn btn-default btn-primary btn-test">按钮</button> <p></p> <button id="btn3" data-pid="3" class="btn btn-default btn-primary btn-test">按钮</button> </div>
Jquery empty() remove() detach() 方法的区别
引言:
最近项目中用到了这几个方法,感觉很大程度上有些相似,查了Jquery的api,同时也找了很多博客文章,发现还是理解不到区别。最后在很多材料和自己的事例验证中,终于找到了区别,不敢独占特拿出来分享。
方法简介:
-
empty()
This method removes not only child (and other descendant) elements, but also any text within the set of matched elements. This is because, according to the DOM specification, any string of text within an element is considered a child node of that element.
该方法不仅删除它的子节点,同时也删除该节点的文本域(根据DOM规范,节点的文本域也被认为是子节点)。
-
remove( [selector] )
selectorA selector expression that filters the set of matched elements to be removed.
Similar to.empty(), the.remove()method takes elements out of the DOM. Use.remove()when you want to remove the element itself, as well as everything inside it. In addition to the elements themselves, all bound events and jQuery data associated with the elements are removed. To remove the elements without removing data and events, use.detach()instead.
和empty方法类似,remove方法也是从DOM里删除元素。当你想要删除节点本身和节点里的所有东西的时候,可以使用remove方法。除了节点本身以外,节点绑定的事件 和该节点相关的JQuery数据,也会被同时清除。当需要清除节点本身,但是不需要清除绑定的事件和数据的时候,可以使用detach方法。
-
detach( [selector] )
selectorA selector expression that filters the set of matched elements to be removed.
The.detach()method is the same as.remove(), except that.detach()keeps all jQuery data associated with the removed elements. This method is useful when removed elements are to be reinserted into the DOM at a later time.
detach方法和remove方法很相似,但是它会保留所有JQuery相关的数据和绑定的事件。当你删除之后,想要在后来的某个时候重新加入时,这个方法将会很有用。
三者区别:
方法名称 |
元素本身(包含所有属性) |
绑定事件和JQuery相关数据 |
文本域及子节点 |
empty() |
不删除 |
不删除 |
删除 |
remove() |
删除 |
删除 |
删除 |
detach() |
删除 |
不删除 |
删除 |
示例验证:
验证环境: JQuery-1.8.0.min.js, Firefox 11.0, Firebug1.9.2;
1、验证是否删除元素本书(包含所有属性)、文本域及子节点
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test Jquery remove detach empty</title> <style>p { background:yellow; margin:6px 0; } p.off { background: black; }</style> <script src="js/jquery-1.8.0.min.js"></script> <script> $(document).ready(function(){ $("p").click(function(){ $(this).toggleClass("off"); }); var p; $("#button").click(function(){ if ( p ) { p.appendTo("body"); p = null; } else { p = $("p").detach(); // p = $("p").remove(); // p = $("p").empty(); } }); }); </script> </head> <body> <p id="A">Hello <span>subNode</span></p> how are <p id="B">you <span>subNode</span></p> <input type="button" id="button" value="Attach/detach paragraphs" /> </body> </html>
detach() 方法:
执行之前的HTML DOM结构如图:
执行删除之后的 HTML DOM结构如图:
观察可知使用detach方法,删掉了元素<p>本身即它的所有属性(id 等), 文本域及其子节点<span>subNode</span>.
其他方法,类似可以验证,这里就不赘述。
2、验证绑定的事件和JQuery相关数据
这里需要说明的是: 绑定事件,指的是JQuery动态绑定的事件,不是通过元素的属性指定的事件。(下面会举例说明)
JQuery 相关数据,不太懂指的什么,没有找到相关示例,希望有识之士不吝赐教。
下面的示例仅针对绑定事件,便于大家理解:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test Jquery remove detach empty</title> <style> p { background:yellow; margin:6px 0; } p.off { background: black; } </style> <script src="js/jquery-1.8.0.min.js"></script> <script> $(document).ready(function(){ // JQuery 为P标签动态绑定click事件 $("p").click(function(){ $(this).toggleClass("off"); }); var p; $("#button").click(function(){ if ( p ) { p.appendTo("body"); p = null; } else { p = $("p").detach(); // p = $("p").remove(); // p = $("p").empty(); } }); }); </script> </head <body> <p id="A">Hello <span>subNode</span></p> how are <p id="B">you <span>subNode</span></p> <input type="button" id="button" value="Attach/detach paragraphs" /> </body> </html>
运行该页面,点击按钮,删除; 再次点击按钮,删除的<p>标签,重新加入到body的底部,这里我们重点验证的是,重新加入后的绑定事件click是否有效。
1) 验证detach方法
可以看到执行detach方法,重新添加之后,JQuery动态绑定的click事件,toggleClass生效,说明之前删除的时候没有把动态绑定的事件删除。
2) 验证remove方法
修改程序中以下部分:
// p = $("p").detach(); p = $("p").remove();
测试remove函数,同样是先删除在加入,执行完后的效果:
可以发现调用remove方法之后,再重新把删除的标签加入到body后时,发现JQuery动态绑定的事件,已经失效,点击P标签,class不能切换。说明在执行remove的时候,已经把JQuery动态绑定的事件删除了。
3) 验证empty方法:
要验证empty方法,要麻烦一点,在删除之后,重新加入之后,text为空,不能够点击测试click事件,因此我们需要新增一个按钮,为这种情况增加text,便于测试click事件。
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test Jquery remove detach empty</title> <style> p { background:yellow; margin:6px 0; } p.off { background: black; } </style> <script src="js/jquery-1.8.0.min.js"></script> <script> $(document).ready(function(){ // JQuery 为P标签动态绑定click事件 $("p").click(function(){ $(this).toggleClass("off"); }); var p; $("#button").click(function(){ if ( p ) { p.appendTo("body"); p = null; } else { // p = $("p").detach(); // p = $("p").remove(); p = $("p").empty(); } }); // 为删除之后重新加入的p标签加入text $("#buttonA").click(function(){ $("#A").text("Hello"); $("#B").text("you "); }); }); </script> </head> <body> <p id="A">Hello <span>subNode</span></p> how are <p id="B">you <span>subNode</span></p> <input type="button" id="button" value="Attach/detach paragraphs" /> <br/> <input type="button" id="buttonA" value="addTextA" /> <br/> </body> </html>
执行效果如图:
可以发现empty方法,没有删除动态绑定事件。
4) 补充讲解:
为了更好的理解这里所说的绑定事件是JQuery的动态绑定事件,我们修改一下程序,使用onclick属性,把click事件作为一个属性值,来静态绑定。
修改后的程序如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Test Jquery remove detach empty</title> <style> p { background:yellow; margin:6px 0; } p.off { background: black; } </style> <script src="js/jquery-1.8.0.min.js"></script> <script> // 处理P标签click事件 function clickHandler(element){ $(element).toggleClass("off"); } $(document).ready(function(){ var p; $("#button").click(function(){ if ( p ) { p.appendTo("body"); p = null; } else { // p = $("p").detach(); p = $("p").remove(); // p = $("p").empty(); } }); }); </script> </head> <body> <p id="A" onclick="clickHandler(this)">Hello <span>subNode</span></p> how are <p id="B" onclick="clickHandler(this)">you <span>subNode</span></p> <input type="button" id="button" value="Attach/detach paragraphs" /> <br/> </body> </html>
我们再次使用remove方法,删除然后在append,发现事件响应有效了。其实这里的click事件已经作为一个静态的p元素的一个属性onclick的值了。所有append之后是有效的。
综上所述,可以得到这个三个方法的上述比较表格了。
参考资料:
1、 JQuery API:
2、 jQuery方法区别(七)detach() remove()区别
from:http://www.educity.cn/wenda/125823.html
相关推荐
### jQuery简单应用实例详解 #### 一、理解jQuery与传统JavaScript的区别 在现代网页开发中,jQuery作为一种轻量级的JavaScript库,极大地简化了HTML文档遍历、事件处理、动画等操作,使得开发者能够更加专注于...
**jQuery应用开发实践指南示例代码** 在编程领域,jQuery是一个非常重要的JavaScript库,它极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。《jQuery应用开发实践指南》是一本深入浅出介绍jQuery使用的书籍...
1.指定在主页面某个div中中显示子页面内容 ,其中renderContainer 可以是主页面div的id或者name 代码如下: $.ajax({ url: url, data: parameters, type:”GET”, dataType:”html”, success:function (html) { $...
**jQuery的简单应用** jQuery是一个高效、简洁且强大的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画设计以及Ajax交互。在"JQuery的简单应用"这个项目中,我们将探讨如何在Sql Server 2005...
**jQuery 简单效果源代码详解** ...通过深入研究这些源代码,你可以学习到如何将jQuery的API应用到实际项目中,提升你的前端开发技能。同时,也可以根据自己的需求对代码进行修改和扩展,以实现更多自定义的效果。
《jQuery应用实例详解》 jQuery,作为一款广泛应用于前端开发的JavaScript库,以其简洁的API和强大的功能,深受开发者喜爱。本篇文章将深入探讨jQuery在实际应用中的多种实例,帮助读者掌握并熟练运用jQuery,提升...
<title>jQuery简单例子 <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 图片元素 --> 示例图片"> 切换图片显示状态 <script src="script.js"></script> ``` 在这个例子中...
总的来说,"基于JQUERY的简单应用"可能涵盖如何在HTML页面中引入jQuery库,使用选择器选取元素,进行DOM操作,绑定事件,创建动画效果,以及进行Ajax交互等内容。这个压缩包中的"范淑娟 123012010016--前端test"可能...
在标题“vue基本环境+jquery ajax应用”中,我们可以理解为这个压缩包可能包含了一个基本的Vue开发环境,并展示了如何结合jQuery的AJAX功能来处理数据请求。 Vue的基本环境通常包括Vue的核心库、Vue CLI(命令行...
1. **选择器**:jQuery借鉴了CSS的选择器语法,使得选取DOM元素变得异常简单。如`$("#id")`用于选取ID为特定值的元素,`$(".class")`用于选取类名为特定值的所有元素。 2. **链式调用**:jQuery对象返回的是jQuery...
《jQuery 1.3.1.js的开发简单应用详解》 jQuery,作为一款广泛应用于Web开发的JavaScript库,因其简洁的API和强大的功能而深受开发者喜爱。本文将深入探讨jQuery 1.3.1.js这一版本的应用,帮助初学者理解和掌握其...
jQuery的集合处理功能非常强大,它内置了`each()`方法,使得对一组元素的迭代操作变得简单。例如,`$("p").each(function(i){...})`可以方便地遍历所有`<p>`元素并执行特定操作,如改变字体颜色。类似的,`$("tr")....
CH1 & CH2 施工完毕,较为简单的案例已略过 原书的案例使用JQ2.X的版本实现的,这里就使用3.6重写了,省略了一些重复的案例。 - 大部分的API从使用方法上来说还是差不多的 - 有几个案例不知道是不是因为版本不同的...
【标题】"简单的JQuery订餐系统"是一个基于JavaScript库JQuery实现的简易订餐应用程序。这个项目旨在帮助用户理解如何运用JQuery来构建交互性强、用户体验良好的前端应用。通过这个系统,我们可以学习到JQuery在网页...
这款基于jQuery的简单富文本编辑器插件,结合了CSS3技术,提供了基础但实用的编辑选项,适用于快速构建具有文本编辑功能的网页界面。 首先,jQuery是一个广泛使用的JavaScript库,它的出现极大地简化了JavaScript的...
"简单的jQuery图片相册插件"就是这样一个工具,特别适合应用于企业网站或商城网站的首页,作为轮播图来呈现产品信息或公司动态。下面将详细探讨jQuery图片相册插件的实现原理、核心功能以及如何在项目中应用。 ### ...
【jQuery简单的网页贪吃蛇小游戏代码】是一款基于jQuery开发的互动娱乐项目,它利用JavaScript语言和HTML5技术,为用户提供了在网页上玩经典贪吃蛇游戏的体验。这款小游戏展示了jQuery库在处理DOM操作、事件绑定以及...
在JQuery的标签中提到了“jquery入门”和“简单应用”,这意味着本文将聚焦于JQuery的基础使用,着重于帮助初学者快速上手。通过一个简单的弹出对话框案例,可以让初学者直观感受JQuery带来的便利性。 内容部分具体...
在本资源"简单的jQuery网页画板涂鸦代码.zip"中,包含了一个基于jQuery实现的简易网页画板功能。这个画板允许用户通过鼠标在页面上进行涂鸦,从而实现在线绘图的效果。以下是对该技术实现的详细解析: 首先,jQuery...
JavaScript语法简洁,易于学习,但功能强大,能够实现从简单的页面效果到复杂的前端应用的各种功能。在JavaScript中,你可以创建事件监听器、操作DOM(Document Object Model)、执行AJAX(Asynchronous JavaScript ...