web関連
【javascript】HTMLコレクションのループ方法
要素を一括で取得してforeachで取得しようとしたらHTMLコレクションをループ処理ができなかった。
HTMLコレクションをforeachでループさせる方法の備忘録。
原因:HTMLコレクションは配列じゃない
HTMLCollectionは配列っぽいオブジェクトだが、配列じゃないためforEach
でループ処理がかけられない。
なので、配列
にする必要性がある。
解決方法:HTMLコレクションを配列にしてループさせる方法
HTMLCollectionを配列にするには二つ方法がある。
Array.from()
メソッド...
というスプレッド構文
実際に使うとこう以下のように使う。
<h2>テスト01</h2>
<h2>テスト02</h2>
<h2>テスト03</h2>
<script>
var hc = document.getElementsByTagName('h2');// HTMLCollection
console.log(Array.from(hc));// Array → (3) [h2, h2, h2]
console.log([...hc]);// Array → (3) [h2, h2, h2]
</script>
そして、forEach
でループをすれば取得できる。
<h2>テスト01</h2>
<h2>テスト02</h2>
<h2>テスト03</h2>
<script>
var hc = document.getElementsByTagName('h2');// HTMLCollection
// ↓どっちか
var hcArray = Array.from(hc);
var hcArray = [...hc];
hcArray.forEach(elm => {
console.log(elm);// 全部出力
});
</script>
以上が、HTMLCollectionでのforEach
を使ったループ処理。
HTMLCollectionと同じく配列のようなオブジェクトであるNodeListがあるが、NodeListはforEachでループ処理可能
おまけ:NodeListはforEach()でそのまま取得可能
NodeListはHTMLCollectionと違いforEach
でそのまま取得可能。
var nl = document.querySelectorAll("要素");// NodeList
nl.forEach(elm => {
console.log(elm);// 全部出力
});