Mengapa forEach pada querySelectorAll Tidak Berkelakuan Seperti Yang Diharapkan dalam Pelayar Microsoft?

DDD
Lepaskan: 2024-10-20 06:38:30
asal
957 orang telah melayarinya

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

forEach on querySelectorAll Not Behaving as Expected in Microsoft Browsers: A Comprehensive Examination and Solution

Internet Explorer and Edge browsers menyajikan cabaran unik untuk pembangun yang menggunakan forEach() kaedah pada hasil querySelectorAll. Walaupun kaedah ini disokong dengan baik dalam kebanyakan penyemak imbas lain, IE dan Edge menghadapi kesukaran disebabkan kaedah DOM dan sifat koleksi yang digunakan.

Perbezaan NodeList dan HTMLCollection

Tidak seperti contoh NodeList seperti tatasusunan , yang mewakili petikan statik elemen padanan, contoh HTMLCollection ialah koleksi langsung yang perubahannya ditunjukkan dalam masa nyata. Kaedah forEach() hanya dilaksanakan baru-baru ini dalam NodeList, manakala HTMLCollection tidak menyokongnya. Walau bagaimanapun, kedua-dua koleksi boleh dilelar, membolehkannya dikembangkan menjadi tatasusunan atau diulang menggunakan gelung for-of atau sifat Symbol.iterator.

Polyfilling forEach() dan Gelagat Boleh Lelar

Kepada menangani ketiadaan forEach() dalam NodeList, poliisi mudah boleh dilaksanakan:

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

Begitu juga, jika penyemak imbas tidak mempunyai sifat Symbol.iterator pada NodeList atau HTMLCollection, ia juga boleh diisi poli:

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
    });
}
Salin selepas log masuk

Kesimpulan

Dengan memahami perbezaan antara NodeList dan HTMLCollection, dan memanfaatkan kuasa polyfill, pembangun boleh memastikan bahawa kaedah forEach() beroperasi dengan lancar merentas semua pelayar, termasuk Internet Explorer dan Tepi. Sampel kod yang disediakan membolehkan pembangun melaksanakan poliisi ini dengan mudah dan memulihkan tingkah laku yang dijangkakan forEach() dalam pelayar Microsoft.

Atas ialah kandungan terperinci Mengapa forEach pada querySelectorAll Tidak Berkelakuan Seperti Yang Diharapkan dalam Pelayar Microsoft?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!