转载JQuery 中empty, remove 和 detach的区别

转载 http://www.cnblogs.com/lisongy/p/4109420.html

 .empty()  描述: 从DOM中移除集合中匹配元素的所有子节点。

 这个方法不接受任何参数。

 这个方法不仅移除子元素(和其他后代元素),同样移除元素里的文本。因为,根据说明,元素里任何文本字符串都被看做是该元素的子节点。请看下面的HTML:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

我们可以移除里面的任何元素

1 $(‘.hello‘).empty();

结果文本 Hello文本被删除:

1 <div class="container">
2   <div class="hello"></div>
3   <div class="goodbye">Goodbye</div>
4 </div>

如果 <div class="hello">里面包含任何数量的嵌套元素,他们也会被移走。

为了避免内存泄漏,jQuery先移除子元素的数据和事件处理函数,然后移除子元素。

如果你想删除元素,不破坏他们的数据或事件处理程序(这些绑定的信息还可以在之后被重新添加回来),请使用.detach()代替 。

.detach()   描述: 从DOM中去掉所有匹配的元素。

.detach() 方法和.remove()一样, 除了 .detach()保存所有jQuery数据和被移走的元素相关联。当需要移走一个元素,不久又将该元素插入DOM时,这种方法很有用。

例子:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4   <style>p { background:yellow; margin:6px 0; } p.off { background: black; }</style>
 5   <script src="http://code.jquery.com/jquery-latest.js"></script>
 6 </head>
 7 <body>
 8   <p>Hello</p>
 9   how are
10   <p>you?</p>
11   <button>Attach/detach paragraphs</button>
12 <script>
13     $("p").click(function(){
14       $(this).toggleClass("off");
15     });
16     var p;
17     $("button").click(function(){
18       if ( p ) {
19         p.appendTo("body");
20         p = null;
21       } else {
22         p = $("p").detach();
23       }
24     });</script>
25
26 </body>
27 </html>

.remove   描述: 将匹配元素集合从DOM中删除。(同时移除元素上的事件及 jQuery 数据。)

和 .empty()相似。.remove() 将元素移出DOM。 当我们想将元素自身移除时我们用 .remove(),同时也会移除元素内部的一切,包括绑定的事件及与该元素相关的jQuery数据。要删除的元素不删除数据和事件的情况下,使用.detach()来代替。

1 <div class="container">
2   <div class="hello">Hello</div>
3   <div class="goodbye">Goodbye</div>
4 </div>

可以移除任何想要移除的元素:

$(‘.hello‘).remove();

结果如下:

1 <div class="container">
2   <div class="goodbye">Goodbye</div>
3 </div>

如果<div class="hello">元素里面有子元素,他们同样会被移除。还有元素上的事件及 jQuery 数据也会被删除。

我们也可以添加一个可选的选择器参数来过滤匹配的元素。例如,前面的代码可以重写为:

1 $(‘div‘).remove(‘.hello‘);

结果将一样:

1 <div class="container">
2   <div class="goodbye">Goodbye</div>
3 </div>

例子:

Example: 将所有段落从DOM删除:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4   <style>p { background:yellow; margin:6px 0; }</style>
 5   <script src="http://code.jquery.com/jquery-latest.js"></script>
 6 </head>
 7 <body>
 8   <p>Hello</p>
 9   how are
10   <p>you?</p>
11   <button>Call remove() on paragraphs</button>
12 <script>
13 $("button").click(function () {
14   $("p").remove();
15 });
16 </script>
17
18 </body>
19 </html>

上面是一些基本概念,让大家久等了,经过本人的测试得出如下结论。empty()方法无参数,而且清空后的子集及文本无法进行还原。而detach()和remove()方法可以将其保存在一个变量中

如声明变量p 写成如下形式

1 var p=$(‘p‘).remove();

当需要从新添加时可以直接添加如下

1  p.appendTo("body");

这是detach()和remove()方法都有的功能。remove()较detach()不同的是remove()可以删除指定的类如remove(‘a’),而detach()不可这样操作,还要注意一点,当用remove()方法移除元素后,再进行添加,再子集的事件的不会存在,而detach()子集的事件还可执行。

如果不明白的或者不清楚的可以随时评论,大家一同学习与进步。

时间: 2024-08-18 12:11:44

转载JQuery 中empty, remove 和 detach的区别的相关文章

探索jquery方法中empty,remove与detach的区别

最近一直疑惑此三种方法的具体区别在于何处,随即想弄明白其具体的区别,看了一些说明,也依照官方文档,终于把这三个方法弄明白了,果然功夫不负有心人,继续努力. 上正文,先简单介绍下这三种方法 .empty()  描述: 从DOM中移除集合中匹配元素的所有子节点. 这个方法不接受任何参数. 这个方法不仅移除子元素(和其他后代元素),同样移除元素里的文本.因为,根据说明,元素里任何文本字符串都被看做是该元素的子节点.请看下面的HTML: <div class="container">

jQuery中的remove()、detach()和empty()的区别

jQuery提供三种删除节点的方法. 1. remove()方法 从DOM中删除所有匹配的元素,传入的参数用于根据jQuery表达式来筛选元素. 返回值是一个指向已被删除的节点的引用. 意思就是说,删除后还可以继续使用: var $li = $("ul li :eq(1)").remove(); $li.appendTo("ul"); 可以使用appendTo()方法,省略remove(); $("ul li:eq(1)").appendTo(&

jQuery 元素移除empty() remove()与detach()的区别?

@1.empty() 删除匹配元素集合中所有的后代字节点元素: <p>hello<span>world</span></p> $("p").empty();   <p></p> @2.remove([expr]) 接收参数表示删除指定的元素 $("p").remove()  删除所有段落 $("p").remove(".hel") 删除带有.hel类名的段

jquery 中remove()与detach()的区别

remove()与detach()方法都是从dom中删除所有的元素 两者的共同之处在于都不会把匹配的元素从jQuery对象中删除. 不同之处在于用remove()删除的元素,除了元素被保留,其他的在这个元素上的绑定事件等都会被移除,但是detach()方法不会移除这个元素上的方法或者是附加数据. 简单举例: html: <body><p>区别</p></body> js: p元素的绑定事件 $("p").click(function(){

jQuery中的closest()和parents()的区别

jQuery中的closest()和parents()的区别 jQuery中closest()和parents()的作用非常相似,都是向上寻找符合选择器条件的元素,但是他们之间有一些细微的差别,官网也给出了说明: .closest() .parents() Begins with the current element Begins with the parent element Travels up the DOM tree until it finds a match for the sup

jquery中html 与 text方法的区别

jquery中html 与 text方法的区别 24 May 2012/in 网站设计和开发 /by Bruce 接鉵jquery的时间并不长,以前都是用直接用js写的,现在发现在jquery这个框架用起来很方便,不但代码量少了,使用也比较简单,对于浏览器的兼容问题也不用担心,在使用的过程中也会遇到一些疑问,在html标签中附加子标签时所用的方法html()与text()的区别. 通常在用jquery写ajax时,都会用到html()这个方法,而不用text()这个方法,他们之间有什么区别呢?

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

jQuery中 .bind() .live(). delegate() . on() 的区别

jQuery中   .bind()    .live().   delegate() .   on()  的区别 这几种方法都是绑定事件用到的,但是他们之间有些差别 bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 例如: <ul> <a href="#"><li>1111111</li></a> <a href="#"><li>22222</

jQuery 中的children()和 find() 的区别

<!DOCTYPE html> <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> </head> <body> <ul class="level-1"> <li class="item-i">I</li>