私は最近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
にはIE11にforEach
があります。
それで私はどこが間違っているのですか?
PS:これはChromeで正常に動作します。
やっと謎が解けた。
明らかに、IE9以降は_Array.forEach
_をサポートしますが、NodeList
が返すquerySelector
はサポートしません。私はArray.from()
を必要とするES6またはES6-shim。
nodeList
をArray
に変換するだけで、これを実行できました。
_Array.prototype.slice.call(document.querySelectorAll("nav a"), 0);
_
問題になっているように Javascriptでは、NodeListを配列に変換する最良の方法は何ですか
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;
}
私はそうしていました:
Array.from(document.querySelectorAll(someElements))
私の答えは単にそれでした:
if (window.NodeList && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
ForEachがNodelistにも存在することを確認します。