一、DOM和Element
- DOM是一棵树,所有节点都是Node
- Node是Element的基类。
- Element是其他HTML元素的基类
下图可以很好的理解:
二、HTMLCollection和NodeList简单例子
- HTMLCollection是Element的集合
- NodeList是Node的集合
看一段代码:
<body>
<p id="p1"><b>node</b> different <em>element</em><!--注释--></p>
<script>
let p1 = document.getElementById('p1')
console.log(p1.children) // HTMLCollection
console.log(p1.childNodes) // NodeList
</script>
</body>
三、HTMLCollection和NodeList之间的异同
不同点:
HTMLCollection | NodeList |
---|---|
是HTML元素的集合 | 是文档节点的集合。 |
可以通过名称,ID或索引号访问HTMLCollection项目 | 只能通过其索引号访问NodeList项 |
不包含属性节点和文本节点 | 只有NodeList对象可以包含属性节点和文本节点 |
HTMLCollection通过document.getElementByClassName()等方法返回的是动态(live)的HTMLCollection集合 | NodeList由Node.childNodes和document.querySelectorAll()返回,不同的是node.ChildNodes返回的是动态(live)的NodeList,而document.querySelectorAll()返回的是静态(static)的NodeList。 |
相同点:
- NodeList节点列表和HTML元素集合几乎是同一件事。
- HTMLCollection对象和NodeList对象都是类似数组的对象列表(集合)。
- 两者都具有length属性,该属性定义列表(集合)中的项目数。
- 两者都提供索引(0、1、2、3、4,…)以像数组一样访问每个项目。
- HTMLCollection和NodeList不是数组!