• 删除节点方法要注意的区别


              删除节点方法要注意的区别

      JQ提供的三个方法

        如果文档中某一个元素多余,那么应该将其删除。jQuery提供了三种删除节点的方法。remove(),detach(),empty(),接下来,我们就进行一一介绍。

        1.remove()方法

          作用是从DOM中删除所有匹配的元素,传入的参数用于根据jQuery表达式来筛选元素。测试HTML代码如下:

     1 <ul>
     2     <li title="one">First li element</li>
     3     <li title="two">
     4         Second li element
     5         <ol>
     6             <li>li element of ol</li>
     7         </ol>
     8     </li> 
     9     <li>
    10         Third li element
    11         <dl>
    12             <dt>dt element of dl</dt>
    13             <dd>dd element of dd</dd>
    14         </dl>     
    15     </li>
    16 </ul>    

          事先给ul的第二个li添加点击事件: 

    $('ul > li:eq(1)').click(function() {   alert('onclick')  });

          然后首先使用remove()方法进行测试,测试代码如下:

     1 //remove()方法
     2 // 首先声明一个变量,来存储被删除元素的引用
     3 var removeObj = null;
     4 // 删除第二个li,并返回被删除元素的引用
     5 $('button:eq(0)').click(function() {
     6     removeObj = $('ul > li:eq(1)').remove();
     7 });
     8 // 被删除元素重新添加到ul中
     9 $('button:eq(1)').click(function() {
    10     $('ul').append(removeObj);
    11 });
    12 // 删除li元素title属性为"three"的
    13 $('button:eq(2)').click(function() {
    14     $('ul > li').remove('li[title="three"]');
    15 });

          依次点击第一,二,三个按钮,依次执行上面程序后,结果如图:

                      

          当某个节点使用remove()方法后,该节点以及所包含的所有后代节点将同时被删除。(图1)。这个方法的返回值是一个指向已被删除的节点的引用,因此可以在以后再使用这些元素。(图2)。最后还可以通过传递参数来选择性地删除元素。(图3)。特别要指出的一点是: 当使用被删除节点的引用重新添加元素到文档中时,处了这个元素本身得以保留外,其他的比如绑定的事件,附加的数据等都会被移除。所有添加回文档中后,点击次元素,并不会弹出"onclick",即绑定的事件没有保留。

        2. detach()方法

          detach()和remove()一样,也是从DOM中去掉所有匹配的元素。但是需要注意的是这个方法也不会把匹配的元素从JQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()唯一不同的是所有绑定的事件,附加的数据等都会保留下来。

     1 // detach() 方法
     2 var detachObj = null;
     3 // 删除第二个li元素
     4 $('button:eq(3)').click(function() {
     5     detachObj = $('ul > li:eq(1)').detach();
     6 });
     7 // 重新添加到文档中
     8 $('button:eq(4)').click(function() {
     9     // 注意: 添加成功后,点击次元素会弹出"onclick",确实保留了绑定事件
    10     $('ul').append(detachObj);
    11 });

        3. empty()方法

          严格来说, empty()方法并不是删除节点,而是清空节点,它能清空元素中的所有后代节点。jQuery代码如下:

    1 $('button:eq(5)').click(function() {
    2     //注: empty()方法不接受参数
    3     $('ul > li:eq(1)').empty();
    4 });

          点击按钮后,如图                         

          我们发现第二个li元素的内容被清空了,只剩下空的li标签。因此特别注意是元素里面的内容哦。

      HTML DOM remove(),removeChild()

        印象中在DOM中除了removeChild()方法,貌似好像也有remove(), removeNode()方法,故查找下了资料。先说说removeChild()方法吧。

        removeChild()

          定义: 删除指定元素的某个指定的子节点。语法: node.removeChild(node); 参数node为被删除的节点,以Node对象返回被删除的节点,如果节点不存在则返回null。

          removeChild()会删除选中元素本身以及所有的后代元素。就不贴代码了,感兴趣的朋友可以亲测。

        remove()

          查了w3cSchool,里面确实有remove()方法,不过使用这个方法有很大的局限性。

          定义: 用于从下列列表删除选项。  语法: selectObject.remove(index); 参数index是必需的,为要删除的选项的索引号。

          测试了下,如果参数不是规定的索引号,那么默认是删除索引号为0的选项(即第一个选项)。 感兴趣的移步w3cschool

        removeNode()

          在核心JS中没有这个方法,但是在IE中有这样的方法,但是在FF等浏览器中并不认识。这样好像用处就并不大了。想了解的看这篇博文吧!

          

  • 相关阅读:
    显示/隐藏Mac下的隐藏文件
    遍历指定文件下所有文件,删除指定后缀文件
    ssh公钥
    设置状态栏(statusbar)的样式
    Silverlight上传下载三种方法解析(三)
    Silverlight上传下载三种方式解析(二)
    Silverlight 上传下载之三种方式解析
    一个简单的存储过程代码生成器
    .net 程序发生了一个不可捕获的异常
    n取的r的组合数问题
  • 原文地址:https://www.cnblogs.com/cleaverlove/p/6294342.html
Copyright © 2020-2023  润新知