如何迭代HTMLCollection?

Fat*_*zli 6 javascript typescript htmlcollection angular

我的HTML中有一些带有类的元素,我node-item在组件中使用以下命令访问它们:

let nodeItems = document.getElementsByClassName('node-item');
Run Code Online (Sandbox Code Playgroud)

当我记录nodeItems它给我一个HTMLCollection[]长度为4.

我尝试了很多方法,但仍无法迭代nodeItems:

1-首先尝试:

let bar = [].slice.call(nodeItems);
for (var g of bar){
    console.log(g); //gives me nothing
} 
Run Code Online (Sandbox Code Playgroud)

2秒尝试:

for(let c of <any>nodeItems) {
    console.log(c); //gives me nothing
}
Run Code Online (Sandbox Code Playgroud)

我尝试了数组迭代和对象迭代,但仍然undefinederror.还尝试过:

let nodeItems = document.querySelector(selectors);

但同样的问题.

Edd*_*die 8

您可以使用展开运算符document.querySelectorAll获得数组。

这是一个片段:

let nodeItems = [...(document.querySelectorAll('.class1'))];

for (var g of nodeItems) {
  console.log( g.innerHTML ); 
}
Run Code Online (Sandbox Code Playgroud)
<div class='class1'>Text 1</div>
<div class='class1'>Text 2</div>
<div class='class1'>Text 3</div>
Run Code Online (Sandbox Code Playgroud)

文档:传播


chr*_*con 7

只需使用Array.from(document.getElementsByClassName('node-item'))或 展开运算符[...document.getElementsByClassName('node-item')]并使用您将在数组上使用的任何内容。

除此之外,您还可以使用普通for循环

let nodeItems = document.getElementsByClassName('node-item');
for (let i = 0; i < nodeItems.length; i++) {
    // access current element with nodeItems[i]
}
Run Code Online (Sandbox Code Playgroud)


Est*_*ask 6

nodeItemsHTMLCollection,类似于数组的对象.

它在现代浏览器中是可迭代的.启用downlevelIteration编译器选项支持迭代,在这种情况下它将是:

const nodeItems = document.getElementsByClassName('node-item');

for (const c of nodeItems) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

Iterables可以在旧版浏览器中进行填充.为DOM迭代core-js提供polyfill.

否则nodeItems可以像往常一样转换为数组并迭代:

const nodeItems = Array.from(document.getElementsByClassName('node-item'));

for (const c of nodeItems) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

  • @geoidesic`typeof`不会告诉您任何信息。数组是对象。 (2认同)

归档时间:

查看次数:

7728 次

最近记录:

7 年,6 月 前