Saya memiliki elemen yang sudah memiliki kelas:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Sekarang saya ingin membuat fungsi JavaScript yang akan menambah kelas ke div
(bukan menggantikan, tetapi menambahkan).
Bagaimana saya bisa melakukan itu?
javascript
css
dom-manipulation
Blankman
sumber
sumber
element.classList.add("my-class")
sebagai gantinya.Jawaban:
Jika Anda hanya menargetkan browser modern:
Gunakan element.classList.add untuk menambahkan kelas:
Dan element.classList.remove untuk menghapus kelas:
Jika Anda perlu mendukung Internet Explorer 9 atau lebih rendah:
Tambahkan spasi plus nama kelas baru Anda ke
className
properti elemen. Pertama, letakkanid
pada elemen sehingga Anda dapat dengan mudah mendapatkan referensi.Kemudian
Perhatikan spasi sebelumnya
otherclass
. Sangat penting untuk memasukkan ruang jika tidak kompromi kelas yang ada yang datang sebelumnya dalam daftar kelas.Lihat juga element.className di MDN .
sumber
Cara termudah untuk melakukan ini tanpa kerangka kerja adalah dengan menggunakan metode element.classList.add .
Sunting: Dan jika Anda ingin menghapus kelas dari suatu elemen -
Saya lebih suka tidak harus menambahkan ruang kosong dan duplikat entri yang menangani sendiri (yang diperlukan saat menggunakan
document.className
pendekatan). Ada beberapa batasan browser , tetapi Anda bisa mengatasinya menggunakan polyfill .sumber
temukan elemen target Anda "d" seperti yang Anda inginkan dan kemudian:
Anda dapat membungkusnya dengan cara yang lebih cerdas untuk memeriksa pra-keberadaan, dan memeriksa persyaratan ruang dll.
sumber
split
classname di whitespace, hapus yang tidak Anda inginkan dari array yang dihasilkan, kemudianjoin
array lagi ... atau gunakanelement.classList.remove
.Tambahkan Kelas
Kompatibel Lintas
Pada contoh berikut kita menambahkan
classname
ke<body>
elemen. Ini kompatibel dengan IE-8.Ini adalah singkatan untuk berikut ini ..
Performa
Jika Anda lebih mementingkan kinerja kompatibilitas silang, Anda dapat mempersingkatnya menjadi yang 4% lebih cepat.
Kenyamanan
Atau Anda bisa menggunakan jQuery tetapi kinerja yang dihasilkan lebih lambat. 94% lebih lambat menurut jsPerf
Menghapus kelas
Performa
Menggunakan jQuery secara selektif adalah metode terbaik untuk menghapus kelas jika Anda khawatir dengan kinerja
Tanpa jQuery, 32% lebih lambat
Referensi
Menggunakan Prototipe
Menggunakan YUI
sumber
a.classList ? ...
) memiliki perbedaan kecepatan dibandingkan dengan yang normal (if (a.classList) { ....
)?classList.remove()
. Kenapa kamu tidak menggunakannya? ini jauh lebih cepat daripada jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
untuk semuanya kecuali untuk menghapus kelas, ini sebabnya saya memintanya.Pendekatan lain untuk menambahkan kelas ke elemen menggunakan JavaScript murni
Untuk menambahkan kelas:
Untuk menghapus kelas:
sumber
Ketika pekerjaan yang saya lakukan tidak menjamin menggunakan perpustakaan, saya menggunakan dua fungsi ini:
sumber
if( cn.indexOf( classname ) != -1 ) { return; }
Hati-hati bahwa jika Anda menambahkan kelas "btn" dengan kelas "btn-info" sudah ada di sini, ini gagal.element.className.split(" ");
untuk mencegah masalah @AlexandreDieulot yang dilaporkan di sini.Dengan asumsi Anda melakukan lebih dari sekedar menambahkan kelas yang satu ini (misalnya, Anda memiliki permintaan asinkron dan seterusnya juga), saya akan merekomendasikan perpustakaan seperti Prototipe atau jQuery .
Ini akan membuat hampir semua yang perlu Anda lakukan (termasuk ini) sangat sederhana.
Jadi misalkan Anda punya jQuery di halaman Anda sekarang, Anda bisa menggunakan kode seperti ini untuk menambahkan nama kelas ke elemen (saat memuat, dalam kasus ini):
Lihat peramban jQuery API untuk hal-hal lain.
sumber
Anda bisa menggunakan metode classList.add OR classList.remove untuk menambah / menghapus kelas dari suatu elemen.
Kode di atas akan menambahkan (dan TIDAK mengganti) kelas "anyclass" ke nameElem. Demikian pula Anda dapat menggunakan metode classList.remove () untuk menghapus kelas.
sumber
Untuk menambahkan kelas tambahan ke elemen:
Untuk menambahkan kelas ke elemen, tanpa menghapus / memengaruhi nilai yang ada, tambahkan spasi dan nama kelas baru, seperti:
Untuk mengubah semua kelas untuk suatu elemen:
Untuk mengganti semua kelas yang ada dengan satu atau lebih kelas baru, setel atribut className:
(Anda dapat menggunakan daftar yang dibatasi ruang untuk menerapkan beberapa kelas.)
sumber
Jika Anda tidak ingin menggunakan jQuery dan ingin mendukung browser lama:
sumber
Saya tahu IE9 adalah shutdown secara resmi dan kami dapat mencapainya dengan
element.classList
banyak yang diceritakan di atas, tetapi saya hanya mencoba mempelajari cara kerjanya tanpaclassList
bantuan banyak jawaban di atas. Saya dapat mempelajarinya.Kode di bawah ini memperluas banyak jawaban di atas dan memperbaikinya dengan menghindari menambahkan kelas duplikat.
sumber
Saya juga berpikir bahwa cara tercepat adalah dengan menggunakan Element.prototype.classList seperti pada es5:
document.querySelector(".my.super-class").classList.add('new-class')
tetapi dalam ie8 tidak ada yang namanya Element.prototype.classList, toh Anda dapat melakukan polyfill dengan snippet ini (bebas untuk mengedit dan memperbaikinya) ):sumber
Hanya untuk menguraikan apa yang dikatakan orang lain, beberapa kelas CSS digabungkan dalam satu string, dibatasi oleh spasi. Jadi, jika Anda ingin kode-keras, itu hanya akan terlihat seperti ini:
Dari sana Anda dapat dengan mudah memperoleh javascript yang diperlukan untuk menambahkan kelas baru ... cukup tambahkan spasi diikuti oleh kelas baru ke properti className elemen. Mengetahui hal ini, Anda juga dapat menulis fungsi untuk menghapus kelas nanti jika perlu.
sumber
Untuk menambah, menghapus, atau memeriksa kelas elemen dengan cara sederhana:
sumber
Anda dapat menggunakan pendekatan modern yang mirip dengan jQuery
Jika Anda hanya perlu mengubah satu elemen, elemen pertama yang JS temukan di DOM, Anda dapat menggunakan ini:
Ingatlah untuk meninggalkan satu spasi sebelum nama kelas.
Jika Anda memiliki beberapa kelas tempat Anda ingin menambahkan kelas baru, Anda dapat menggunakannya seperti ini
sumber
Saya pikir lebih baik menggunakan JavaScript murni, yang bisa kita jalankan di DOM Browser.
Ini adalah cara fungsional untuk menggunakannya. Saya telah menggunakan ES6 tetapi merasa bebas untuk menggunakan ES5 dan ekspresi fungsi atau definisi fungsi, mana saja yang sesuai dengan JavaScript StyleGuide Anda.
sumber
Sampel dengan JS murni. Dalam contoh pertama kita mendapatkan id elemen kita dan menambahkan misalnya 2 kelas.
Dalam contoh kedua kita mendapatkan nama kelas elemen dan menambahkan 1 lagi.
sumber
Bagi mereka yang menggunakan Lodash dan ingin memperbarui
className
string:sumber
pertama, beri id id. Kemudian, panggil fungsi appendClass:
sumber
indexOf
adalah solusi naif dan memiliki masalah yang sudah ditunjukkan .Anda bisa menggunakan pemilih API API untuk memilih elemen Anda dan kemudian membuat fungsi dengan elemen dan nama kelas baru sebagai parameter. Menggunakan classlist untuk browser modern, yang lain untuk IE8. Kemudian Anda dapat memanggil fungsi setelah suatu peristiwa.
sumber
Terpendek
Tampilkan cuplikan kode
sumber
ATAU:
Pendekatan pertama membantu dalam menambahkan kelas ketika pendekatan kedua tidak berhasil.
Jangan lupa untuk menyimpan ruang di depan
' someclassname'
dalam pendekatan pertama.Untuk penghapusan Anda dapat menggunakan:
sumber
Kode js ini berfungsi untuk saya
menyediakan penggantian nama kelas
Untuk menambahkan gunakan saja
Untuk menghapus penggunaan
Semoga ini bermanfaat untuk sombody
sumber
Di YUI, jika Anda memasukkan yuidom , Anda dapat menggunakannya
YAHOO.util.Dom.addClass('div1','className');
HTH
sumber