IE で NodeList をループ処理する

毎回調べてるのでメモ。IE では NodeList に forEach メソッドが実装されていないため、querySelectorAll() の返値を forEach で走査できません。IE をサポートする必要がある Web サイトなどを構築するときに NodeList のループ処理を行うときには、ループ可能なオブジェクトに変換してあげる必要があります。

Array.prototype.forEach を使う方法

MDN に書いてある方法。 NodeList をループ以外にも使う場合はこの方法でループするといいかも。

const list = document.querySelectorAll('div.some-class');
[].forEach.call(list, item => { });

配列に変換しておく

ループするだけなら最初から配列に変換してもよさそう。

const list = [].slice.call(document.querySelectorAll('div.some-class'));
list.forEach(item => { });

あとがき

[] のおかげでタイプが減ってなかなかいいなと。 そして IE 案件が世界から無くなりますように。

unimoku

Web サイトの制作、運営とアプリケーションのフロントエンド開発などをやっています。主に使うのはTypeScript、JavaScript、PHP、C/C++。特にTypeScriptが好きです。