js node.children与node.childNodes与node.firstChild,node,lastChild之间的关系

2017-11-6 15:05:41 3,566 views

当父节点下有不止一个子节点存在的时候,node.firstChild与node.lastChild分别指向节点的第一个节点和最后一个节点。
node.children代表着节点的子节点个数,不包含文本节点,只有元素节点,     在ie8中还包括注释节点,如下面的ul li只要不在里面注释就行,就可以去得到元素节点,而不包括注释节点。
若以如下书写格式书写写 node.childNodes在ie9+及其他主流浏览器中都包含文本节点
 

<ul>
    <li>test</li>
    <li>test</li>
    <li>test</li>
    <li>test</li>
  </ul>
console.log(ul.children.length); //4   始终为4
console.log(ul.childNodes.length); //在ie9+及其他主流浏览器都为9个节点,包含了文本节点   ie9以下为4个元素节点
console.log(ul.childNodes[0] == ul.firstChild);//true
console.log(ul.childNodes[ul.childNodes.length - 1] == ul.lastChild);//true

在只有文本节点的情况下,ul.children与ul.childNodes获取的节点是相同的。
 
在有文本和元素节点同时存在时,可以用检测来过滤

var ul=document.getElementsByTagName("ul")[0];
    var len=ul.childNodes.length;
    for(var i=0;i<len;i++){
    if(ul.childNodes[i].nodeType==1){
      console.log(ul.childNodes[i]);
    }
    }

 
或者直接用children

var ul=document.getElementsByTagName("ul")[0];
for(var i=0,len=ul.children.length;i<len;i++){
    console.log(ul.children[i]);
  }

 
 
 

0

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。