刪除節點方法要注意的區別


          刪除節點方法要注意的區別

  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等瀏覽器中並不認識。這樣好像用處就並不大了。想了解的看這篇博文吧!

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM