Bagaimana saya bisa mengubah kelas elemen HTML dalam menanggapi suatu onclick
peristiwa menggunakan JavaScript?
javascript
html
dom
Nathan Smith
sumber
sumber
element.setAttribute(name, value);
Gantiname
denganclass
. Gantivalue
dengan nama apa pun yang Anda berikan kepada kelas, diapit dengan tanda kutip. Ini menghindari perlu menghapus kelas saat ini dan menambahkan yang berbeda. Contoh jsFiddle ini menunjukkan kode kerja penuh.<input type='button' onclick='addNewClass(this)' value='Create' />
dan di bagian javascript:function addNewClass(elem){ elem.className="newClass";
} OnlineJawaban:
Teknik HTML5 modern untuk mengubah kelas
Browser modern telah menambahkan classList yang menyediakan metode untuk membuatnya lebih mudah untuk memanipulasi kelas tanpa perlu perpustakaan:
Sayangnya, ini tidak berfungsi di Internet Explorer sebelum v10, meskipun ada shim untuk menambahkan dukungan untuk itu ke IE8 dan IE9, tersedia dari halaman ini . Namun, semakin banyak didukung .
Solusi lintas-browser sederhana
Cara standar JavaScript untuk memilih elemen menggunakan
document.getElementById("Id")
, yang digunakan contoh-contoh berikut - Anda tentu saja dapat memperoleh elemen dengan cara lain, dan dalam situasi yang tepat dapat menggunakanthis
saja - namun, memerinci hal ini berada di luar cakupan jawabannya.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.)
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 menghapus kelas dari suatu elemen:
Untuk menghapus satu kelas ke suatu elemen, tanpa mempengaruhi kelas potensial lainnya, diperlukan penggantian regex sederhana:
Penjelasan dari regex ini adalah sebagai berikut:
Itu
g
bendera menceritakan ganti untuk mengulang seperti yang diperlukan, dalam hal nama kelas telah ditambahkan beberapa kali.Untuk memeriksa apakah kelas sudah diterapkan ke elemen:
Regex yang sama yang digunakan di atas untuk menghapus kelas juga dapat digunakan sebagai pemeriksaan apakah kelas tertentu ada:
Menetapkan tindakan ini untuk mengeklik acara:
Meskipun dimungkinkan untuk menulis JavaScript langsung di dalam atribut acara HTML (seperti
onclick="this.className+=' MyClass'"
), ini bukan perilaku yang disarankan. Terutama pada aplikasi yang lebih besar, kode yang lebih dapat dikelola dicapai dengan memisahkan markup HTML dari logika interaksi JavaScript.Langkah pertama untuk mencapai ini adalah dengan membuat fungsi, dan memanggil fungsi di atribut onclick, misalnya:
(Tidak perlu memiliki kode ini dalam tag skrip, ini hanya untuk singkatnya contoh, dan termasuk JavaScript dalam file yang berbeda mungkin lebih tepat.)
Langkah kedua adalah memindahkan acara onclick dari HTML dan ke JavaScript, misalnya menggunakan addEventListener
(Perhatikan bahwa bagian window.onload diperlukan agar konten fungsi tersebut dieksekusi setelah HTML selesai memuat - tanpa ini, MyElement mungkin tidak ada ketika kode JavaScript dipanggil, sehingga baris akan gagal.)
Kerangka dan Perpustakaan JavaScript
Kode di atas semuanya dalam JavaScript standar, namun itu adalah praktik umum untuk menggunakan kerangka kerja atau pustaka untuk menyederhanakan tugas-tugas umum, serta mendapat manfaat dari bug tetap dan kasus tepi yang mungkin tidak Anda pikirkan ketika menulis kode Anda.
Sementara beberapa orang menganggap itu berlebihan untuk menambahkan kerangka ~ 50 KB hanya untuk mengubah kelas, jika Anda melakukan sejumlah besar pekerjaan JavaScript, atau apa pun yang mungkin memiliki perilaku lintas-browser yang tidak biasa, ada baiknya mempertimbangkan.
(Secara kasar, perpustakaan adalah seperangkat alat yang dirancang untuk tugas tertentu, sementara kerangka kerja umumnya berisi beberapa perpustakaan dan melakukan serangkaian tugas lengkap.)
Contoh di atas telah direproduksi di bawah ini menggunakan jQuery , mungkin pustaka JavaScript yang paling umum digunakan (meskipun ada juga yang layak diselidiki).
(Perhatikan bahwa di
$
sini adalah objek jQuery.)Mengubah Kelas dengan jQuery:
Selain itu, jQuery menyediakan pintasan untuk menambahkan kelas jika tidak berlaku, atau menghapus kelas yang:
Menetapkan fungsi ke acara klik dengan jQuery:
atau, tanpa perlu id:
sumber
class="button MyClass MyClass MyClass"
Anda juga bisa melakukan:
Dan untuk beralih kelas (hapus jika ada yang lain tambahkan):
sumber
classList
shim Eli Grey .classList
.Di salah satu proyek lama saya yang tidak menggunakan jQuery, saya membangun fungsi berikut untuk menambah, menghapus, dan memeriksa apakah elemen memiliki kelas:
Jadi, misalnya, jika saya ingin
onclick
menambahkan beberapa kelas ke tombol saya dapat menggunakan ini:Sekarang pasti akan lebih baik menggunakan jQuery.
sumber
Anda dapat menggunakan
node.className
seperti ini:Ini harus bekerja di IE5.5 dan lebih tinggi sesuai dengan PPK .
sumber
Wow, terkejut ada begitu banyak jawaban berlebihan di sini ...
sumber
Menggunakan kode JavaScript murni:
sumber
Ini bekerja untuk saya:
sumber
el.setAttribute('class', newClass)
atau lebih baikel.className = newClass
. Tapi tidakel.setAttribute('className', newClass)
.Anda juga dapat memperluas objek HTMLElement, untuk menambahkan metode untuk menambah, menghapus, beralih dan memeriksa kelas ( inti ):
Dan kemudian gunakan seperti ini (klik akan menambah atau menghapus kelas):
Ini demo .
sumber
Hanya untuk menambahkan informasi dari kerangka kerja populer lainnya, Google Closures, lihat kelas dom / kelas mereka:
Salah satu opsi untuk memilih elemen menggunakan goog.dom.query dengan pemilih CSS3:
sumber
Beberapa catatan kecil dan perubahan pada regex sebelumnya:
Anda akan ingin melakukannya secara global jika daftar kelas memiliki nama kelas lebih dari sekali. Dan, Anda mungkin ingin menghapus spasi dari ujung daftar kelas dan mengonversi beberapa ruang menjadi satu ruang agar tidak mendapatkan ruang berlari. Tak satu pun dari hal-hal ini akan menjadi masalah jika satu-satunya kode yang bertele-tele dengan nama kelas menggunakan regex di bawah ini dan menghapus nama sebelum menambahkannya. Tapi. Nah, siapa yang tahu siapa yang mungkin berkutat dengan daftar nama kelas.
Regex ini tidak peka terhadap huruf besar-kecil sehingga bug dalam nama kelas dapat muncul sebelum kode digunakan pada browser yang tidak peduli dengan huruf besar-kecil dalam nama kelas.
sumber
Ubah kelas CSS elemen dengan JavaScript di ASP.NET :
sumber
Saya akan menggunakan jQuery dan menulis sesuatu seperti ini:
Kode ini menambahkan fungsi untuk dipanggil ketika elemen id -elemen diklik. Fungsi menambahkan klik ke atribut kelas elemen jika itu belum menjadi bagian dari itu, dan menghapusnya jika ada di sana.
Ya, Anda perlu menambahkan referensi ke pustaka jQuery di halaman Anda untuk menggunakan kode ini, tetapi setidaknya Anda bisa merasa yakin sebagian besar fungsi di pustaka akan bekerja pada hampir semua browser modern, dan itu akan menghemat waktu Anda menerapkan kode Anda sendiri untuk melakukan hal yang sama.
Terima kasih
sumber
jQuery
dalam bentuk panjang sekali.jQuery(function($) { });
membuat$
tersedia di dalam fungsi dalam semua kasus.Garis
seharusnya:
sumber
Ubah kelas elemen dalam JavaScript vanilla dengan dukungan IE6
Anda dapat mencoba menggunakan
attributes
properti node untuk menjaga kompatibilitas dengan browser lama bahkan IE6:sumber
Ini versi saya, berfungsi penuh:
Pemakaian:
sumber
foobar
jika Anda mencoba untuk menghapus kelasfoo
. JS dalam atribut event handler intrinsik telah rusak sebelum diedit. Jawaban yang diterima 4 tahun jauh lebih baik.foobar
masalah. Lihat tes di siniBerikut ini adalah toggleClass untuk beralih / menambah / menghapus kelas pada suatu elemen:
Lihat jsfiddle
lihat juga jawaban saya di sini untuk membuat kelas baru secara dinamis
sumber
Saya menggunakan fungsi JavaScript vanilla berikut dalam kode saya. Mereka menggunakan ekspresi reguler dan
indexOf
tetapi tidak perlu mengutip karakter khusus dalam ekspresi reguler.Anda juga dapat menggunakan element.classList di browser modern.
sumber
PILIHAN.
Berikut adalah sedikit contoh style vs. classList untuk membuat Anda melihat apa saja pilihan yang tersedia dan cara menggunakannya
classList
untuk melakukan apa yang Anda inginkan.style
vs.classList
Perbedaan antara
style
danclassList
adalah bahwa denganstyle
Anda menambah sifat-sifat gaya elemen, tapiclassList
ini agak mengendalikan kelas (es) dari elemen (add
,remove
,toggle
,contain
), saya akan menunjukkan bagaimana menggunakanadd
danremove
metode karena mereka adalah yang populer.Contoh Gaya
Jika Anda ingin menambahkan
margin-top
properti ke dalam elemen, Anda dapat melakukannya di:Contoh classList
Katakanlah kita memiliki
<div class="class-a class-b">
, dalam hal ini, kita sudah memiliki 2 kelas yang ditambahkan ke elemen div kita,class-a
danclass-b
, dan kita ingin mengendalikan kelasremove
apa dan kelas apa yang ingin kita ikutiadd
. Di sinilahclassList
menjadi berguna.Menghapus
class-b
Menambahkan
class-c
sumber
Hanya berpikir saya akan memasukkan ini:
sumber
katakan saja
myElement.classList="new-class"
kecuali Anda perlu mempertahankan kelas lain yang ada dalam hal ini Anda dapat menggunakanclassList.add, .remove
metode.sumber
OK, saya pikir dalam hal ini Anda harus menggunakan jQuery atau menulis Metode Anda sendiri dalam javascript murni, preferensi saya adalah menambahkan metode saya sendiri daripada menyuntikkan semua jQuery ke aplikasi saya jika saya tidak membutuhkannya karena alasan lain.
Saya ingin melakukan sesuatu seperti di bawah ini sebagai metode kerangka kerja javascript saya untuk menambahkan beberapa fungsi yang menangani penambahan kelas, menghapus kelas, dll mirip dengan jQuery, ini didukung penuh di IE9 +, juga kode saya ditulis dalam ES6, jadi Anda perlu untuk memastikan browser Anda mendukungnya atau Anda menggunakan sesuatu seperti babel, jika tidak perlu menggunakan sintaks ES5 dalam kode Anda, juga dengan cara ini, kami menemukan elemen melalui ID, yang berarti elemen perlu memiliki ID yang akan dipilih:
dan Anda dapat memanggil menggunakannya seperti di bawah ini, bayangkan elemen Anda memiliki id 'id' dan kelas 'kelas', pastikan Anda meneruskannya sebagai string, Anda dapat menggunakan util seperti di bawah ini:
sumber
classList
API DOM:Cara yang sangat mudah untuk menambah dan menghapus kelas adalah
classList
DOM API. API ini memungkinkan kami untuk memilih semua kelas elemen DOM tertentu untuk mengubah daftar menggunakan javascript. Sebagai contoh:Kita dapat mengamati dalam log bahwa kita mendapatkan kembali suatu objek dengan tidak hanya kelas-kelas elemen, tetapi juga banyak metode dan properti bantu. Objek ini mewarisi dari antarmuka DOMTokenList , antarmuka yang digunakan dalam DOM untuk mewakili satu set token yang dipisahkan ruang (seperti kelas).
Contoh:
sumber
Ya ada banyak cara untuk melakukan ini. Dalam sintaks ES6 kita dapat mencapai dengan mudah. Gunakan kode ini untuk menambahkan dan menghapus kelas.
sumber
menggunakan jawaban yang diterima di atas di sini adalah fungsi lintas-browser sederhana untuk menambah dan menghapus kelas
tambahkan kelas:
hapus kelas:
sumber
Banyak jawaban, banyak jawaban bagus.
ATAU
Itu dia.
Dan, jika Anda benar-benar ingin tahu mengapa dan mendidik diri sendiri maka saya sarankan membaca jawaban Peter Boughton , itu sempurna.
Catatan:
Ini dimungkinkan dengan ( dokumen atau acara ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
sumber
Ada className properti di javascript untuk mengubah nama kelas elemen HTML. Nilai kelas yang ada akan diganti dengan yang baru, yang telah Anda tetapkan di className.
Kredit - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
sumber
Pertanyaan OP adalah Bagaimana saya bisa mengubah kelas elemen dengan JavaScript?
Browser modern memungkinkan Anda melakukan ini dengan satu baris javascript :
document.getElementById('id').classList.replace('span1','span2')
The
classList
atribut menyediakan DOMTokenList yang memiliki berbagai metode . Anda dapat beroperasi pada classList elemen menggunakan manipulasi sederhana seperti add () , hapus () atau ganti () . Atau dapatkan sangat canggih dan memanipulasi kelas seperti Anda akan objek atau Peta dengan kunci () , nilai () , entri ()Jawaban Peter Boughton adalah jawaban yang bagus tetapi sekarang sudah lebih dari satu dekade. Semua browser modern sekarang mendukung DOMTokenList - lihat https://caniuse.com/#search=classList dan bahkan IE11 mendukung beberapa metode DOMTokenList
sumber
mencoba
Tampilkan cuplikan kode
sumber
Kode JavaScript yang berfungsi:
Anda dapat mengunduh kode yang berfungsi dari tautan ini .
sumber
Berikut adalah kode jQuery sederhana untuk melakukan itu.
Sini,
Semoga berhasil.
sumber