javascript DOM操作 节点的遍历

一、通过javascript的遍历可以由一个节点来查找它的子节点(childNodes)、兄弟节点(nextSibling/previousSibling)和父节点(parentNode)。

代码说明:

<ul id="myul">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>

1、获取ul的所有子节点——childNodes

<script>
        var ul=document.getElementById('myul');
        for(var i=0;i<ul.childNodes.length;i++){
            console.log(ul.childNodes[i]);
        }
    </script>

2、因为通过1获取了ul的所有的子节点,所以就可以直接通过childNodes来直接访问它里面的子节点

    提醒:1、childNodes最后获得的是一个数组对象childNodes[i]    2、这里所获得的素有子节点也包括空白节点,看截图

javascript DOM操作  节点的遍历

所以,

访问第一个li: ul.childNodes[1]或者ul.childNodes.item(1)

       第二个li: ul.childNodes[3]或者ul.childNodes.item(3)

       第三个li: ul.childNodes[5]或者ul.childNodes.item(5)

       第四个li: ul.childNodes[7]或者ul.childNodes.item(7)

      

3、访问到了第一个li,就可以通过第一个li节点来访问后面一个或者前面一个,那就是nextSibling/previousSibling

    所以:

    第二个li:ul.childNodes[1].nextSibling.nextSibling(不要忘了之间的空白节点);

    第一个li:   ul.childNodes[3].previousSibling.previousSibling

4、当然我们也可以直接通过firstChild和lastChild来访问ul的第一个节点和第二个节点

5、访问到子节点,直接parentNode找到父节点

二、解决空白节点的问题

   1、在js里面添加一个判断

<script>
        var ul=document.getElementById('myul');
        for(var i=0;i<ul.childNodes.length;i++){
               if(ul.childNodes[i].nodeType==1){
                console.log(ul.childNodes[i]);
            }
        } 
</script>

这样控制台打印出的结果就是4个li子元素

2、还是上面的例子

     获得所有li:  ul.children获得一个数组

    第一个li:ul.children[0]或者ul.children.item(0)或者ul.firstElementChild;

    兄弟li:nextElementSibling/previousElementSibling

    最后一个li:lastElementChild