


Internet Explorer および Microsoft Edge で forEach 関數(shù)が機(jī)能しないのはなぜですか?
Oct 20, 2024 am 06:47 AMforEach Function Not Working in Recent Microsoft Browsers
Web アプリケーションで製品選択用のスクリプトを作成しようとして、開発者が次のような問題に遭遇しました。 Internet Explorer 11 および Microsoft Edge でのエラー。エラー メッセージは、forEach 関數(shù)が IE9 以降のバージョンで利用可能であると報(bào)告されているにもかかわらず、サポートされていないことを示していました。
問題の調(diào)査
forEach メソッドは通常、配列要素を反復(fù)処理し、各要素に関數(shù)を適用するために使用されます。この場(chǎng)合、開発者は製品の構(gòu)成から色のオプションを選択する方法を利用しました。ただし、調(diào)査の結(jié)果、次のコード スニペット:
var color_btns = document.querySelectorAll('#color > p'); color_btns.forEach(function(color) { color.onclick = function () { color_btns.forEach(function(element) { if (element.classList.contains('selected')) { element.classList.remove('selected'); } }); color.classList.add('selected'); document.querySelector('#f_color').value = color.dataset.id; }; });
が Internet Explorer および Microsoft Edge で期待どおりに機(jī)能せず、forEach 関數(shù)が NodeList のプロパティではないことを示すエラーがスローされることが判明しました。 querySelectorAll.
問題の理由
さらなる調(diào)査の結(jié)果、querySelectorAll および類似のメソッドによって返されるオブジェクトのタイプである NodeList と HTMLCollection が次のとおりであることが判明しました。本當(dāng)の配列ではなく、反復(fù)可能です。 JavaScript では、イテラブルとは、for-of ループ、スプレッド演算子、または代入の構(gòu)造化を使用して反復(fù)できるオブジェクトです。
NodeList オブジェクトは最近 forEach メソッドのサポートを取得しましたが、HTMLCollection オブジェクトはサポートされておらず、サポートされることも期待されていませんそれをサポートするために。これは、forEach メソッドを HTMLCollection に追加すると既存のコードが壊れる可能性があるため、下位互換性の問題によるものです。
Polyfilling forEach
この問題を解決するには、次のことをお?jiǎng)幛幛筏蓼埂?NodeList オブジェクトの forEach メソッドをポリフィルします。ポリフィルには、ネイティブにサポートされていないメソッドをオブジェクトに追加することが含まれます。次のコード スニペットは、NodeList の forEach をポリフィルできます:
if (typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype.forEach) { NodeList.prototype.forEach = Array.prototype.forEach; }
上記のコードに示すように、enumerable、configurable、writable がすべて true である必要があり、値プロパティであるため、直接割り當(dāng)てが可能です。
ポリフィルの反復(fù)性
さらに、NodeList オブジェクトを反復(fù)可能にして、for-of ループとスプレッド演算子を使用した反復(fù)をサポートすることもできます。これは、次のポリフィルを使用して実現(xiàn)できます。
if (typeof Symbol !== "undefined" && Symbol.iterator && typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype[Symbol.iterator]) { Object.defineProperty(NodeList.prototype, Symbol.iterator, { value: Array.prototype[Symbol.iterator], writable: true, configurable: true }); }
ポリフィルを使用した例
これらのポリフィルを組み込むことで、サポートされているすべての環(huán)境でシームレスに実行されるように元のコードを変更できます。ブラウザ:
// Polyfilling forEach for NodeList if (typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype.forEach) { NodeList.prototype.forEach = Array.prototype.forEach; } // Polyfilling iterability for NodeList if (typeof Symbol !== "undefined" && Symbol.iterator && typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype[Symbol.iterator]) { Object.defineProperty(NodeList.prototype, Symbol.iterator, { value: Array.prototype[Symbol.iterator], writable: true, configurable: true }); } var color_btns = document.querySelectorAll('#color > p'); color_btns.forEach(function(color) { color.onclick = function () { color_btns.forEach(function(element) { if (element.classList.contains('selected')) { element.classList.remove('selected'); } }); color.classList.add('selected'); document.querySelector('#f_color').value = color.dataset.id; }; });
この更新されたコード スニペットは、Internet Explorer や Microsoft Edge を含むすべてのブラウザで意図したとおりに機(jī)能するはずです。
以上がInternet Explorer および Microsoft Edge で forEach 関數(shù)が機(jī)能しないのはなぜですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JavaScriptisidealforwebdevelopment,whileJavasuitslarge-scaleapplicationsandAndroiddevelopment.1)JavaScriptexcelsincreatinginteractivewebexperiencesandfull-stackdevelopmentwithNode.js.2)Javaisrobustforenterprisesoftwareandbackendsystems,offeringstrong

JavaScriptでは、シングルラインコメント(//)またはマルチラインコメント(//)を選択することは、コメントの目的とプロジェクトの要件に依存します。 2。詳細(xì)なドキュメントには、マルチラインコメントを使用します。 3。コメントスタイルの一貫性を維持します。 4。過剰な承認(rèn)を避けます。 5.コメントがコードと同期して更新されていることを確認(rèn)してください。適切な注釈スタイルを選択すると、コードの読みやすさと保守性を向上させることができます。

はい、javascriptcommentsは不必要に使用されています。

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

ContureCrucialInjavascript formantaining andFosteringCollaboration.1)TheypindeBugging、Onboarding、およびUnderstandingCodeevolution.2)usesingle-linecomments for quickexplanations andmulti-linecomments fordeTeTaileddespransions.3)BestPractsinclud

javascripthasseveralprimitivedatypes:number、string、boolean、undefined、null、symbol、andbigint、andnon-primitiveTypeslike objectandarray

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures
