2016-08-31 4 views
3

私はDOM操作について学んでいますが、私はForEachループを使用できるdocument.querySelectorAllを使ってNodeListを作成すると気付きました。それは不可能ではありません。それはなぜ機能するのですか?配列でしか動作しないと仮定しています。Javascript forEachメソッドがNodeListのために働いています

var items = document.querySelectorAll("li"); 
console.log(items); 

items.forEach(function(item){ 
    item.addEventListener("click", function(){ 
     item.classList.toggle("finished"); 
    }); 
    item.addEventListener("mouseover", function(){ 
     item.classList.add("over"); 
    }, false); 
    item.addEventListener("mouseleave", function(){ 
     item.classList.remove("over"); 
    }); 
}) 
+0

Chromeでは動作しますが、Firefoxでは動作しません。だから、それは非標準的なブラウザの振る舞いのようです。 EDIT:Edgeには存在しません。 – vlaz

答えて

3

これはブラウザによって異なりますが、Chromeではサポートされていますが、他のブラウザではサポートされていません。 NodeListのforEachはクロムのプロトタイプであり、他のブラウザでは使用されません。すべてのブラウザでのNodeListをループする

// to check for forEach support 
if(NodeList.prototype.forEach) /*...*/ 

for (var i = 0, l=myNodeList.length; i < l; ++i) { 
    var item = myNodeList[i]; 
} 

か、単純に配列に変換することができます

var div_list = document.querySelectorAll('div'); // returns NodeList 
var div_array = Array.prototype.slice.call(div_list); // converts NodeList to Array 

あなたが読むことができ、より詳細こちら:https://developer.mozilla.org/en/docs/Web/API/NodeList

関連する問題