2013-07-15 58 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也是一个丰富的信息。