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


       最近一直疑惑此三种方法的具体区别在于何处,随即想弄明白其具体的区别,看了一些说明,也依照官方文档,终于把这三个方法弄明白了,果然功夫不负有心人,继续努力。

      上正文,先简单介绍下这三种方法


     .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()子集的事件还可执行。

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

  • 相关阅读:
    for of 与 for in的区别
    Mac Item2 SSH免密登录Linux 服务器的两种方式
    组塞式,非阻塞式,同步异步
    Thrift_简介(基于C#)
    HTTP Error 500.22
    http协议
    IIS_部署出错
    JavaScript如何实现继承
    $(function(){})与 (function(){})() (function($){})() 的区别
    C#_反射机制
  • 原文地址:https://www.cnblogs.com/lisongy/p/4109420.html
Copyright © 2020-2023  润新知