childNodes与children区别

15 篇文章 0 订阅

获取节点信息是js中必不可少的操作,那么childNodes和children有什么区别呢?

  1. instanceof用来判断获取的节点的类型
    测试对象在其原型链中是否存在一个构造函数的prototype属性
    instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

    // 定义构造函数
    function C(){}
    function D(){}
    
    var o = new C();
    
    // true,因为 Object.getPrototypeOf(o) === C.prototype
    o instanceof C;
    
    // false,因为 D.prototype不在o的原型链上
    o instanceof D;
    
    o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true
    C.prototype instanceof Object // true,同上
  2. 节点类型NodeType

    节点类型 NodeType 元素element 1 属性attr 2 文本text 3 注释comments 8 文档document 9

  3. document.getElementById获取到的是什么节点呢?
    如下可知获得的是元素节点

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Demo</title>
    </head>
    <body>
        <div id="test">
            <p>One</p>
            <P>Two</p>
        </div>
        <script>
            var oDiv=document.getElementById("test");
            console.log(oDiv instanceof Node);        //true
            console.log(oDiv instanceof Element);    //true
        </script>
    </body>
    </html>
  4. childNodes children
      children是Element的属性,childNodes是Node的属性,我们再来测试一下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Demo</title>
    </head>
    <body>
        <div id="test">
            <p>One</p>
            <P>Two</p>
        </div>
        <script>
            var oDiv=document.getElementById("test");
            console.log(oDiv.children[0] instanceof Node);        //true
            console.log(oDiv.children[0] instanceof Element);    //true
    
            console.log(oDiv.childNodes[0] instanceof Node);    //true
            console.log(oDiv.childNodes[0] instanceof Element);    //false
    
            console.log(typeof oDiv.childNodes[0].children);    //undefined
            console.log(typeof oDiv.childNodes[0].childNodes);    //object
        </script>
    </body>
    </html>
  5. 结论
    区别:

    childNodes: 获取到所有的节点,包含元素节点、属性节点、文本节点 节点类型可以用nodeType来区分, 元素节点1、属性节点2、文本节点3

    children: 则只会获取到元素节点

    如:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <ul>
          <li></li>
          <li></li>
        </ul>
        <script type="text/javascript" src="./childNodes|children.js">
    
        </script>
      </body>
    </html>
    window.onload=function(){
      var oUl = document.getElementsByTagName('ul')[0];
      alert(oUl.childNodes.length);
      console.log(oUl.childNodes);  //[text, li, text, li, text]
    }

    结果是childNodes 5
    children 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值