「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Microsoft ブラウザで querySelectorAll の forEach が期待どおりに動作しないのはなぜですか?

Microsoft ブラウザで querySelectorAll の forEach が期待どおりに動作しないのはなぜですか?

2024 年 11 月 1 日に公開
ブラウズ:376

Why is forEach on querySelectorAll Not Behaving as Expected in Microsoft Browsers?

querySelectorAll の forEach が Microsoft ブラウザーで期待どおりに動作しない: 包括的な検査と解決策

Internet Explorer および Edge ブラウザーは、forEach() を利用する開発者に特有の課題を提示します。 querySelectorAll 結果のメソッド。このメソッドは他のほとんどのブラウザで十分にサポートされていますが、IE と Edge では、採用されている DOM メソッドとコレクション プロパティにより問題が発生します。

NodeList と HTMLCollection の区別

配列のような NodeList インスタンスとは異なります。 、一致する要素の静的スナップショットを表す HTMLCollection インスタンスは、変更がリアルタイムで反映されるライブ コレクションです。 forEach() メソッドは最近 NodeList に実装されたばかりですが、HTMLCollection ではサポートされていません。ただし、両方のコレクションは反復可能であり、for-of ループまたは Symbol.iterator プロパティを使用して配列に展開したり、反復したりできます。 NodeList に forEach() がない場合は、単純なポリフィルを実装できます:

if (typeof NodeList !== "unknown" && NodeList.prototype && !NodeList.prototype.forEach ) { NodeList.prototype.forEach = Array.prototype.forEach; }

同様に、ブラウザに NodeList または HTMLCollection の Symbol.iterator プロパティがない場合は、ポリフィルすることもできます。

if (typeof NodeList !== "undefined" && NodeList.prototype && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = Array.prototype.forEach;
}

結論

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
    });
}
リリースステートメント この記事は次の場所に転載されています: 1729377497 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3