节点node和元素element的区别

使用dom4j解析处理html时,遇到了一些问题:

取出来Node对象(比如一个table),再往下取时,再用node1.selectNodes会取不到东西(实际上取出来的是一个空的文本节点),所以最好转为Element,就很容易了,element1.elements("tr"),就可以方便地循环了,比较奇怪的是转换为Element的方法居然是强转-_-!
Element table1 = (Element) tables.get(0);


这就导致我对Element和Node 的区别产生了一定的问题?查阅了一定的资料,总结了如下一些规律:

下面是一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <div id="parentDiv">
     <!--注释-->
     <div></div>
 </div>
 <script>
     console.log(document.getElementById('parentDiv').childNodes); //NodeList[5]
     console.log(document.getElementById('parentDiv').children) ;  //HTMLCollection[1]
 </script>
</body>
</html>


控制台输出如图所示:



childNodes属性返回的是NodeList数组,是属于节点(也包括元素)的属性,而children属性返回的是子元素,是属于元素的属性。而在Nodelist数组里面也有元素存在,证明了元素也是节点的一种,即元素节点。

W3C中的解释是:
在 HTML DOM (文档对象模型)中,每个部分都是节点:
    文档本身是文档节点
    所有 HTML 元素是元素节点
    所有 HTML 属性是属性节点
    HTML 元素内的文本是文本节点 (包括回车符也是属于文本节点)
    注释是注释节点

 Element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点。
 NodeList 对象表示节点列表,比如 HTML 元素的子节点集合。
 元素也可以拥有属性。属性是属性节点。

 总结:元素是元素节点,是节点中的一种,但元素节点中可以包含很多的节点。


    

扫描二维码关注公众号,回复: 2590759 查看本文章


猜你喜欢

转载自blog.csdn.net/Asa_Prince/article/details/78762646