Rumah > hujung hadapan web > tutorial js > Mengapa `getElementsByClassName` Tidak Berfungsi dengan `forEach` Secara Terus?

Mengapa `getElementsByClassName` Tidak Berfungsi dengan `forEach` Secara Terus?

DDD
Lepaskan: 2024-12-01 11:01:14
asal
819 orang telah melayarinya

Why Doesn't `getElementsByClassName` Work with `forEach` Directly?

Array.forEach Kaedah: Keserasian dengan getElementsByClassName

Semasa cuba mengulang elemen DOM menggunakan getElementsByClassName method, pembangun mungkin menemui kaedah ralat pelik: "document.getElementsByClassName('myclass').forEach bukan fungsi." Walaupun terdapat kedua-dua getElementsByClassName dan Array.forEach dalam Firefox 3, ralat berterusan.

Kekeliruan timbul kerana hasil getElementsByClassName bukan Array. Dalam pelayar moden, ia ialah HTMLCollection, koleksi khusus yang disesuaikan untuk elemen HTML. Walaupun ia mempunyai sifat seperti tatasusunan, ia bukanlah tatasusunan yang benar.

Untuk menyelesaikan isu tersebut dan berjaya mengulangi elemen, pembangun boleh menggunakan helah: mereka boleh memanggil kaedah Array's forEach, menghantar HTMLCollection sebagai nilai ini:

var els = document.getElementsByClassName("myclass");

Array.prototype.forEach.call(els, function(el) {
    // Do stuff here
});
Salin selepas log masuk

Teknik ini membolehkan lelaran diteruskan seperti yang diharapkan. Sebagai alternatif, pembangun boleh menggunakan Array.from, tersedia dalam persekitaran ES6, untuk menukar HTMLCollection kepada Array sebelum melelakan:

Array.from(els).forEach((el) => {
    // Do stuff here
});
Salin selepas log masuk

Dengan menggunakan teknik ini, pembangun boleh mengulang secara berkesan elemen DOM yang diperoleh melalui getElementsByClassName, memastikan keserasian dengan kaedah Array.forEach.

Atas ialah kandungan terperinci Mengapa `getElementsByClassName` Tidak Berfungsi dengan `forEach` Secara Terus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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