HTMLCollection 是一个类数组对象,表示 HTML 文档中一组元素的集合。它通常通过诸如 getElementsByTagName
、getElementsByClassName
或 querySelectorAll
等方法返回。HTMLCollection 是实时的(live),这意味着当文档结构发生变化时,它会自动更新。
HTMLCollection 主要有两种类型:
querySelectorAll
返回,是一个静态集合。getElementsByTagName
和 getElementsByClassName
返回,是一个动态集合。let elements = document.getElementsByTagName('div');
for (let i = 0; i < elements.length; i++) {
console.log(elements[i]);
}
let elements = Array.from(document.getElementsByTagName('div'));
elements.forEach(function(element) {
console.log(element);
});
let elements = Array.from(document.getElementsByTagName('div'));
for (let element of elements) {
console.log(element);
}
原因:在遍历过程中,如果其他脚本或事件修改了 DOM,HTMLCollection 的长度和元素位置可能会发生变化。
解决方法:
let elements = Array.from(document.getElementsByTagName('div'));
for (let i = 0; i < elements.length; i++) {
console.log(elements[i]);
}
let elements = document.getElementsByTagName('div');
for (let i = elements.length - 1; i >= 0; i--) {
console.log(elements[i]);
}
通过这些方法,可以有效避免因 DOM 变化导致的遍历问题,确保代码的稳定性和可靠性。
领取专属 10元无门槛券
手把手带您无忧上云