JavaScript中Element与Node的区别,children与childNodes的区别
来源:互联网 发布:计算机病毒预防软件 编辑:程序博客网 时间:2024/06/08 04:32
本文首发博客园:http://jscode.cnblogs.com,转载请注明出处。
关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别。
Node(节点)是DOM层次结构中的任何类型的对象的通用名称,Node有很多类型,如元素节点,属性节点,文本节点,注释节点等,通过NodeType区分,常见的有:
更多节点类型参考:https://developer.mozilla.org/en-US/docs/DOM/Node.nodeType?redirectlocale=en-US&redirectslug=nodeType
Element继承了Node类,也就是说Element是Node多种类型中的一种,即当NodeType为1时Node即为ElementNode,另外Element扩展了Node,Element拥有id、class、children等属性。
以上就是Element跟Node的区别。
那么用document.getElementById("xxx")取到的是Node还是Element呢?我们来测试一下:
<!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>
我们可以看到用document.getElementById("xxx")取到的既是Element也是Node。
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>
通过上面的代码我们可以看到,Element的children[0]仍为Element,是Node和Element的实例,Node的childNdoes[0]为Node,只是Node的实例,不是Element的实例。
同时,Node的children属性为为undefined。
----------------------------------------------------------------------
对于DOM元素,children是指DOM Object类型的子对象,不包括tag之间隐形存在的TextNode,而childNodes包括tag之间隐形存在的TextNode对象。
具体看一下针对children和childNodes在chrome环境下的测试:
测试结果如下:
上面childNodes集合的结果中有两个undefined节点,这两个就是nodeType=3的TextNode,即回车,回车无tagName,但是childNodes能识别,而children不能识别。注意了,<span>不属于TextNode
如果把HTML代码写成如下样式,那么children和childNodes的结果就没有差别了。
对document、head、body及div等HTML元素实测未发现有其他差异
- JavaScript中Element与Node的区别,children与childNodes的区别
- JavaScript中Element与Node的区别,children与childNodes的区别
- JavaScript中Element与Node的区别,children与childNodes的区别
- JavaScript中Element与Node的区别,children与childNodes的区别
- JavaScript中Element与Node的区别,children与childNodes的区别
- Element与Node的区别,children与childNodes的区别
- javascript中childNodes与children的区别
- JS中Element与Node的区别,children与childNodes的区别
- Dom 中 children 与childNodes 的区别
- children与childNodes的区别
- javascript中children和childNodes的区别
- javascript中children和childNodes的区别
- childNodes.length与children.length的区别
- childNodes与children区别
- children的childNodes区别
- javascript中childNodes与children 区别 以及firstChild与firstElementChild区别
- children和childNodes 的区别
- children和childNodes 的区别
- Java版抓取网站妹子图片
- dedecms tag 标签调用方法(详细介绍)
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
- BZOJ1854 [Scoi2010]游戏
- HDU 1050 Moving Tables 求最大重复次数
- JavaScript中Element与Node的区别,children与childNodes的区别
- hdu 1052 田忌赛马(贪心)
- 初始JSP表达式语言-EL
- 1002. 写出这个数 (20)
- AngularJS 深入理解 $scope
- 第六天:串口通信概念、原理
- 对封装、抽象、继承、多态的理解?(java四大特性)
- UML的基本元素
- 基本概念和古典概型