Rumah > hujung hadapan web > tutorial css > Mengapakah Menukar Nama Kelas dengan `getElementsByClassName()` Hanya Mempengaruhi Setiap Elemen Lain dalam JavaScript?

Mengapakah Menukar Nama Kelas dengan `getElementsByClassName()` Hanya Mempengaruhi Setiap Elemen Lain dalam JavaScript?

Barbara Streisand
Lepaskan: 2024-11-28 06:42:17
asal
681 orang telah melayarinya

Why Does Changing Class Names with `getElementsByClassName()` Affect Only Every Other Element in JavaScript?

className Menukar Setiap Masalah Kelas Lain

Isu

Dalam JavaScript, kaedah getElementsByClassName() mengembalikan HTMLCollection yang mengandungi elemen yang berkongsi kelas CSS tertentu. Walau bagaimanapun, telah diperhatikan bahawa apabila menggunakan perubahan kelas pada elemen ini, hanya kelas ganti yang terjejas.

Punca

Isu ini timbul kerana HTMLCollection yang dikembalikan oleh getElementsByClassName() ialah koleksi langsung. Ini bermakna bahawa sebarang perubahan pada DOM, seperti mengubah suai nama kelas, akan mengubah suai koleksi itu sendiri.

Apabila sifat className diubah suai, elemen itu dialih keluar daripada koleksi. Ini mengakibatkan saiz koleksi berkurangan, dan percubaan seterusnya untuk mengakses elemen yang sama menggunakan indeksnya mungkin mengakibatkan melangkau elemen ganti.

Penyelesaian

Untuk menyelesaikan isu ini, terdapat dua potensi penyelesaian:

1. Ubah suai Hanya Nama Kelas Elemen Pertama

Daripada mengulangi keseluruhan HTMLCollection dan menukar className setiap elemen, ubah suai hanya className elemen pertama.

for (var i = 0; i < blockSetLength; i++) {
  blockSet[0].className = "block-selected";
}
Salin selepas log masuk

2. Gunakan Struktur Data seperti Tatasusunan Statik

Daripada menggunakan getElementsByClassName(), yang mengembalikan koleksi langsung, buat struktur data seperti tatasusunan statik. Ini boleh dilakukan dengan menggunakan fungsi Array.from() untuk menukar HTMLCollection kepada tatasusunan biasa, atau mencipta tatasusunan secara manual dan mengisinya dengan elemen HTMLCollection.

const blockSetArray = Array.from(blockSet);

for (var i = 0; i < blockSetArray.length; i++) {
  blockSetArray[i].className = "block-selected";
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah Menukar Nama Kelas dengan `getElementsByClassName()` Hanya Mempengaruhi Setiap Elemen Lain dalam JavaScript?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan