Sejauh ini saya harus melakukan ini:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
Meskipun ini bisa dilakukan di jQuery, seperti ini
$(elem).addClass("first second third");
Saya ingin tahu apakah ada cara asli untuk menambah atau menghapus.
javascript
html
Tenda Enrique Moreno
sumber
sumber
Operator spread baru membuatnya lebih mudah untuk menerapkan beberapa kelas CSS sebagai array:
sumber
DOMTokenList
bukan array? Saya tahu bahwa DOMTokenList adalah objek mirip array. Jadi dimungkinkan untuk menggunakannya denganclassList.add()
metode atau haruskah DOMTokenList dikonversi dalam array nyata?The
classList
properti memastikan bahwa duplikat kelas tidak perlu ditambahkan ke elemen. Untuk menjaga fungsi ini, jika Anda tidak menyukai versi lama atau versi jQuery, saya sarankan menambahkanaddMany
fungsi danremoveMany
keDOMTokenList
(tipeclassList
):Ini kemudian akan bisa digunakan seperti:
Memperbarui
Sesuai komentar Anda, jika Anda hanya ingin menulis metode khusus untuk ini jika tidak ditentukan, coba yang berikut ini:
sumber
Karena
add()
metode dariclassList
just memungkinkan untuk melewati argumen terpisah dan bukan array tunggal, Anda perlu membuat fakturadd()
menggunakan apply. Untuk argumen pertama, Anda harus meneruskanclassList
referensi dari simpul DOM yang sama dan sebagai argumen kedua array kelas yang ingin Anda tambahkan:sumber
Untuk menambahkan kelas ke elemen
Hapus kelas
sumber
className
. Sangat buruk untuk kinerja (bahkan mengambil nilainya menyebabkan reflow).Versi yang lebih baru dari spesifikasi DOMTokenList memungkinkan untuk beberapa argumen untuk
add()
danremove()
, serta argumen keduatoggle()
untuk memaksa negara.Pada saat penulisan, Chrome mendukung banyak argumen untuk
add()
danremove()
, tetapi tidak ada browser lain yang mendukung. IE 10 dan lebih rendah, Firefox 23 dan lebih rendah, Chrome 23 dan lebih rendah dan browser lain tidak mendukung argumen keduatoggle()
.Saya menulis polyfill kecil berikut untuk menyuruh saya sampai dukungan mengembang:
Peramban modern dengan kepatuhan ES5 dan
DOMTokenList
diharapkan, tetapi saya menggunakan polyfill ini di beberapa lingkungan yang ditargetkan secara spesifik, jadi ini berfungsi dengan baik bagi saya, tetapi mungkin perlu mengutak-atik skrip yang akan berjalan di lingkungan browser lama seperti IE 8 dan lebih rendah .sumber
Anda bisa melakukan seperti di bawah ini
Menambahkan
Menghapus
Referensi
TLDR;
Dalam kasus lurus ke depan penghapusan harus bekerja. Tetapi dalam hal penghapusan, Anda harus memastikan kelas ada sebelum Anda menghapusnya
sumber
Ini adalah solusi untuk pengguna IE 10 dan 11 yang tampaknya cukup mudah.
Atau
sumber
Definisi standar hanya memungkinkan untuk menambah atau menghapus satu kelas. Beberapa fungsi pembungkus kecil dapat melakukan apa yang Anda minta:
Pembungkus ini memungkinkan Anda untuk menentukan daftar kelas sebagai argumen terpisah, sebagai string dengan spasi atau item yang dipisahkan koma, atau kombinasi. Sebagai contoh, lihat http://jsfiddle.net/jstoolsmith/eCqy7
sumber
Solusi yang sangat sederhana, tidak mewah, tetapi berfungsi yang harus saya percayai adalah browser yang sangat lintas:
Buat fungsi ini
Sebut saja seperti ini: removeAddClasses (node.classList, arrayToRemove, arrayToAdd);
... dimana arrayToRemove adalah larik nama kelas yang akan dihapus: ['myClass1', 'myClass2'] etcetera
... dan arrayToAdd adalah array nama kelas untuk ditambahkan: ['myClass3', 'myClass4'] dan sebagainya
sumber
Asumsikan bahwa Anda memiliki array kelas yang akan ditambahkan, Anda dapat menggunakan sintaksis penyebaran ES6:
let classes = ['first', 'second', 'third']; elem.classList.add(...classes);
sumber
Saya menyukai jawaban @ rich.kelly, tetapi saya ingin menggunakan nomenklatur yang sama dengan
classList.add()
(string dipisahkan koma), jadi sedikit penyimpangan.Jadi Anda dapat menggunakan:
Saya perlu menguji semua browser, tetapi ini berhasil untuk Chrome.
Haruskah kita memeriksa sesuatu yang lebih spesifik daripada keberadaan
DOMTokenList.prototype.addMany
? Apa sebenarnya yang menyebabkanclassList.add()
kegagalan di IE11?sumber
Untuk polyfill lain
element.classList
ada di sini . Saya menemukannya melalui MDN .Saya menyertakan skrip itu dan menggunakannya
element.classList.add("first","second","third")
sesuai dengan tujuannya.sumber