クラス_node-item
_を使用してHTMLにいくつかの要素があります。次のコマンドを使用して、コンポーネント内の要素にアクセスします。
_let nodeItems = document.getElementsByClassName('node-item');
_
nodeItems
をログに記録すると、長さ4の_HTMLCollection[]
_が得られます.
私は多くの方法を試しましたが、それでもnodeItems
を反復できません:
1-最初の試行:
_let bar = [].slice.call(nodeItems);
for (var g of bar){
console.log(g); //gives me nothing
}
_
2秒の試行:
_for(let c of <any>nodeItems) {
console.log(c); //gives me nothing
}
_
そして、配列反復とオブジェクト反復を試みましたが、それでもundefined
またはerror
です。また試しました:
let nodeItems = document.querySelector(selectors);
しかし、同じ問題。
nodeItems
はHTMLCollection
で、配列のようなオブジェクトです。
それは、最新のブラウザーで反復可能です。イテレータは downlevelIteration
コンパイラオプション を有効にしてサポートされており、この場合は次のようになります。
const nodeItems = document.getElementsByClassName('node-item');
for (const c of nodeItems) {
// ...
}
イテラブルは古いブラウザでポリフィルできます。 core-js
は DOMイテラブルのポリフィル を提供します。
それ以外の場合は、nodeItems
を配列に変換して、通常どおり反復できます。
const nodeItems = Array.from(document.getElementsByClassName('node-item'));
for (const c of nodeItems) {
// ...
}
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]
}
spread演算子をdocument.querySelectorAll
で使用して配列を作成できます。
これがスニペットです:
let nodeItems = [...(document.querySelectorAll('.class1'))];
for (var g of nodeItems) {
console.log( g.innerHTML );
}
<div class='class1'>Text 1</div>
<div class='class1'>Text 2</div>
<div class='class1'>Text 3</div>
ドキュメント: Spread