2013-07-15 108 views
0

這麼多混淆,只有很少的答案。我試圖通過DOM循環,通過id尋找一個特定的節點,但是,這段代碼有幾個問題,我沒有解釋。首先,childNodes列表的長度爲'5'。兩個「ul」,兩個「id」,如果這些數字...和一個運氣?使用javascript檢測HTML DOM中元素的屬性

其次,它死於if(y[i].hasAttribute('id')===true)。 Firebug說這不是一個功能。我沒有理由不相信,但我不確定它爲什麼不相信。

謝謝你的幫助。

<div id="list"> 
<ul id="first"></ul> 
<ul id="second"></ul> 
</div> 
    <script> 
     var comments=document.getElementById('list') 
         var y=comments.childNodes; 
         var count=y.length 
         for(i=0;i<count;i++) 
         { 
          document.write(y.length); 
          if(y[i].hasAttribute('id')===true) 
          { document.write('here!');} 

         } 
    </script> 
+0

也許嘗試:'if(y [i] .nodeType === 1 && y [i] .hasAttribute('id')=== true){'這樣你只能檢查'Element'節點。 **或者**,使用'var y = comments.children;'只能遍歷'Element' nodex。 – Ian

回答

0

childNodes屬性包含在DOM,具體是指所有節點,它包括文本節點。你有3個 - 你的div內的換行/換行字符。

您可以測試使用nodeType屬性的子元素(例如參見here; 1代表ELEMENT_NODE3代表TEXT_NODE)。

+0

啊,我明白了,所以這有點類似於檢查xml,所以你不讀空白空間?非常感謝您的鏈接!我從來沒有解決過這個問題。 – user1874309

0

如果您使用像Firebug這樣的工具並檢查DOM本身,您會看到元素的所有子元素以及.children和.childNodes之間的區別。

這是通過在DOM中狩獵,我發現爲什麼有這麼多東西,起初似乎是對方的重複,但肯定不是。 Mozilla開發者網站developer.mozilla.org也是一個豐富的信息。