いくつかの DOM 要素を反復処理したいので、次のようにします。
document.getElementsByClassName( "myclass" ).forEach( function(element, index, array) {
//do stuff
});
しかし、エラーが発生します:
document.getElementsByClassName("myclass").forEach は関数ではありません
私は Firefox 3 を使用しているので、getElementsByClassName
と の両方Array.forEach
が存在することはわかっています。これは問題なく動作します:
[2, 5, 9].forEach( function(element, index, array) {
//do stuff
});
getElementsByClassName
配列の結果ですか? そうでない場合、それは何ですか?
ベストアンサー1
いいえ、配列ではありません。DOM4で指定、 それはHTMLCollection
(少なくとも最近のブラウザでは。古いブラウザではNodeList
)。
すべての最新ブラウザ (IE <= 8 以外のほぼすべてのブラウザ) では、Array のforEach
メソッドを呼び出して、要素のリスト (またはHTMLCollection
)NodeList
をthis
値として渡すことができます。
var els = document.getElementsByClassName("myclass");
Array.prototype.forEach.call(els, function(el) {
// Do stuff here
console.log(el.tagName);
});
// Or
[].forEach.call(els, function (el) {...});
ES6を使用できるという幸運な立場にいる場合(つまり、Internet Explorerを無視しても問題ないか、ES5トランスパイラを使用している場合)、Array.from
:
Array.from(els).forEach((el) => {
// Do stuff here
console.log(el.tagName);
});