2012-06-07 10 views
0

如果我提取HTML文檔的所有元素並將它們存儲在數組中。 現在假設我使用jquery remove()方法刪除了一些元素。我知道它也會刪除它的小孩。現在我想遍歷列表並想知道哪些子元素也被刪除。 看看這段代碼: -Idenify不存在的html元素

$(document).ready(function() { 
     var list = $('*'); 
     for (var i=0; i<list.length; i++) { 
      console.log(i + " " + list[i].tagName); 
     } 
     $("table").remove(); 
     for (var i=0; i<list.length; i++) { 
      if ($(list[i]).parent().length == 0) console.log(list[i].tagName + "does not exist in dom now"); 
      else console.log(i + " " + list[i].tagName + " " + $(list[i]).parent().get(0).tagName); 
     } 
    }); 

HTML部分是: -

<div> 
    <table> 
     <tr> 
      <td> Hi this is Sachin </td> 
      <td> Hi this is Rahul </td> 
     </tr> 
    </table> 
</div> 

而且我收到的輸出是:_

0 HTML parent.html:9 
1 HEAD parent.html:9 
2 SCRIPT parent.html:9 
3 SCRIPT parent.html:9 
4 BODY parent.html:9 
5 DIV parent.html:9 
6 TABLE parent.html:9 
7 TBODY parent.html:9 
8 TR parent.html:9 
9 TD parent.html:9 
10 TD parent.html:9 
0 HTML undefined parent.html:14 
1 HEAD HTML parent.html:14 
2 SCRIPT HEAD parent.html:14 
3 SCRIPT HEAD parent.html:14 
4 BODY HTML parent.html:14 
5 DIV BODY parent.html:14 
TABLEdoes not exist in dom now parent.html:13 
7 TBODY TABLE parent.html:14 
8 TR TBODY parent.html:14 
9 TD TR parent.html:14 
10 TD TR 

我不明白爲什麼TD和tr正在展示他們的父母。他們也將被視爲已刪除。現在有沒有其他方法可以找出哪些是我列表中已刪除的項目。 在此先感謝

+0

你有什麼目標?如果你不想從'list'中刪除所有被刪除的元素的子元素,爲什麼不用相同的選擇器重新填充列表並重置for循環。 – 2012-06-07 07:16:53

回答

3

的問題是你檢查是否一個元素有一個家長或不:

if ($(list[i]).parent().length == 0) 

僅僅因爲你已刪除從DOM元素並不意味着其後代已被刪除從那個元素。他們已將從DOM中移除(因爲他們的父母有),但他們都擁有該父母。

你可以使用closest檢查,如果該元素有一個body的祖先,而不是:

if ($(list[i]).closest("body").length == 0) 

由於元素在DOM不再,他們不應該有一個body祖先。


作爲一個側面說明,因爲0計算結果爲false,可以簡化您的病情一點點:

if (!$(list[i]).closest("body").length) 
+0

謝謝詹姆斯,學習了一些新東西..感謝很多! – sachinjain024

+1

@blunderboy - 沒問題,很高興我可以幫助:) –

+1

我有一些疑問,因爲我已經從DOM中刪除元素因此,當我訪問元素像$(列表[我])不應該它只選擇文檔中的元素它應該根據我是空的,但實際上是不是。爲什麼這是這樣,即使從文檔中刪除一些元素,我可以訪問它使用$(列表[i]).. – sachinjain024