当父节点下有不止一个子节点存在的时候,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]); }