NodeList和HTMLCollection集合
HTMLCollection是Element的集合
Nodelist是Node的集合
NodeList
NodeList是一个节点的集合(既可以包含元素和其他节点),在DOM中,节点的类型总共有12种,通过判断节点的nodeType来判断节点的类型。我们可以通过Node.childNodes和document.querySelectAll() (返回NodeList的接口有很多,这里不一一列举,下同)来获取到一个NodeList对象。NodeList对象有个length属性和item()方法,length表示所获得的NodeList对象的节点个数,这里还是要强调的是节点,而item()可以传入一个索引来访问Nodelist中相应索引的元素。
<body>
<div id="d1">
刘备
<p>张三</p>
<p>李四</p>
</div>
<script>
let d1 = document.querySelector('#d1')
console.log(d1.childNodes)// NodeList
</script>
</body>
HTMLCollection
HTMLCollection是元素集合,它和NodeList很像,有length属性来表示HTMLCollection对象的长度,也可以通过elements.item()传入元素索引来访问。当时它还有一个nameItem()方法,可以返回集合中name属性和id属性值得元素。HTMLDocument 接口的许多属性都是 HTMLCollection 对象,它提供了访问诸如表单、图像和链接等文档元素的便捷方式,比如document.images和document.forms的属性都是HTMLCollection对象
<body>
<div id="d1">
刘备
<p>张三</p>
<p>李四</p>
</div>
<script>
let d1 = document.querySelector('#d1')
d2=d1.childNodes
console.log(d1.children) //HTMLCollection
console.log(d2.length)//输出为5
</script>
</body>
区别
node.childNodes 结果返回类型是 NodeList
node.children 结果返回类型是 HTMLCollection
即HTMLCollection是元素集合,Nodelist是节点集合(包括元素也包括节点)
NodeList节点列表和HTML元素集合几乎是同一件事。
HTMLCollection对象和NodeList对象都是类似数组的对象列表(集合)。
两者都具有length属性,该属性定义列表(集合)中的项目数。
两者都提供索引(0、1、2、3、4,…)以像数组一样访问每个项目。
可以通过名称,ID或索引号访问HTMLCollection项目。
只能通过其索引号访问NodeList项。
只有NodeList对象可以包含属性节点和文本节点。
HTMLCollection和NodeList不是数组!