web-dev-qa-db-ja.com

Internet Explorer 11のSCRIPT438エラー

私は最近JavaScriptの作業を行っており、IE11でページを開くまでは問題ありませんでした。 Mozillaウェブサイト.forEachはIE9からサポートされています。

これは私が得たエラーです。

SCRIPT438:オブジェクトはプロパティまたはメソッド「forEach」をサポートしていません

これがコードです。

var link1 = document.querySelectorAll("nav a");
    var textbox = document.getElementById("OutputWindow");
    link1.forEach(function (element) {
        textbox.innerHTML += "<br/>" + element + "\n";
        element.onclick = function () {
            alert("Hello!");
            console.log("hello!");
            confirm("Hello!");
        };
    });

私はポリフィルを試しましたが、私の楽しみとして、ArrayにはIE11forEachがあります。

それで私はどこが間違っているのですか?

PS:これはChromeで正常に動作します。

14
Prajwal

やっと謎が解けた。

明らかに、IE9以降は_Array.forEach_をサポートしますが、NodeListが返すquerySelectorはサポートしません。私はArray.from()を必要とするES6またはES6-shim

nodeListArrayに変換するだけで、これを実行できました。

_Array.prototype.slice.call(document.querySelectorAll("nav a"), 0);
_

問題になっているように Javascriptでは、NodeListを配列に変換する最良の方法は何ですか

30
Prajwal
if (typeof Array.prototype.forEach != 'function') {
Array.prototype.forEach = function (callback) {
    for (var i = 0; i < this.length; i++) {
        callback.apply(this, [this[i], i, this]);
    }
 };
}

if (window.NodeList && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
 }  
6
Artem Langaviy

私はそうしていました:

Array.from(document.querySelectorAll(someElements))

私の答えは単にそれでした:

if (window.NodeList && !NodeList.prototype.forEach) {
   NodeList.prototype.forEach = Array.prototype.forEach;
}

ForEachがNodelistにも存在することを確認します。

0
etiennejcharles