JS children和childNodes的区别

属性介绍

  1. children
    children:返回父元素所有的直系子节点的集合,注意,children只返回HTML元素节点,不包括文本节点和属性节点。

  2. childNodes
    childNodes:返回父元素所有的直系子节点的集合,注意,与children不同的是,childNodes会返回HTML元素节点,属性节点,文本节点。

代码演示

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="test">
            我是第一个子节点(且为文本节点)
            <div>我是第二个子节点(同时是第一个HTML元素节点)</div>
            我是第三个子节点(也是子节点)
            <div>我是第四个子节点(同时也是第二个HTML元素节点)</div>

            <div>我是五个子节点(同时也是第三个HTML元素节点),但我面前有个回车(即空节点)
                <div>我是第五个子元素的一个子节点</div>
            </div>
        </div>

        <script type="text/javascript">
            var test = document.getElementById('test');
            for(var i = 0; i < test.childNodes.length; i++){
                console.log(test.childNodes[i]);
                if(i == test.childNodes.length-1){
                    console.log('test.childNodes.length: ',test.childNodes.length);
                }
            }
            for(var j = 0; j < test.children.length; j++){
                console.log(test.children[j]);
                if(j == test.children.length-1){
                    console.log('test.children.length: ',test.children.length)
                }
            }
        </script>
    </body>
</html>

以上代码是分别在控制台输出#test 的childNodes和children。


代码运行结果图如下:
这里写图片描述

可以发现,test.childNodes.length是7,其中包括两个文本节点,三个HTML元素节点和两个回车产生的节点(即控制台中显示的#test);

有时候需要获取指定元素的第一个HTML子节点(非属性/文本节点),最容易想到的就是firstChild 属性。代码中第一个HTML节点前如果有换行,空格,那么firstChild返回的就不是你想要的了。可以使用nodeType来判断下。

function getFirst(elem){
    for(var i=0,e;e=elem.childNodes[i++];){
        if(e.nodeType==1)
            return e;
    }
}



test.children.length是3,仅仅是三个HTML元素节点。这里需要注意的是children在IE中包含注释节点。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值