Bagaimana Anda melakukan jQuery hasClass
dengan JavaScript biasa? Sebagai contoh,
<body class="foo thatClass bar">
Apa cara JavaScript untuk bertanya jika <body>
sudah thatClass
?
javascript
dom
Kyle
sumber
sumber
class
properti (yang dalam hal beberapa kelas akan memiliki beberapa nama kelas dalam urutan acak yang dipisahkan oleh spasi) dan memeriksa apakah nama kelas Anda ada di dalamnya. Tidak terlalu sulit, tetapi masih sangat merepotkan jika tidak untuk tujuan pembelajaran :)Jawaban:
Anda dapat memeriksa apakah
element.className
cocok/\bthatClass\b/
.\b
cocok dengan istirahat kata.Atau, Anda dapat menggunakan implementasi jQuery sendiri:
Untuk menjawab pertanyaan Anda yang lebih umum, Anda dapat melihat kode sumber jQuery di github atau pada sumber untuk
hasClass
khususnya di penampil sumber ini .sumber
rclass
sebenarnya;))\b
cocok dengan "thatClass-anotherClass"?/[\t\r\n\f]/g
. Juga bagus untuk menyebutkan bahwa/\bclass\b/
bisa gagal untuk nama-nama kelas dengan-
tanda minus (selain itu berfungsi baik), itu sebabnya implementasi jQuery lebih baik dan lebih dapat diandalkan. Misalnya:/\bbig\b/.test('big-text')
mengembalikan true, bukan false yang diharapkan.Cukup gunakan
classList.contains()
:Penggunaan lain dari
classList
:Dukungan Browser:
classList
Dukungan Browsersumber
.classList
sebagai string, tetapi tidak akan mengenali metode yang lebih modern seperti.classList.contains()
Yang paling efektif adalah liner itu
thisClass
elemen yang dimilikiclass="thisClass-suffix"
.sumber
Atribut yang menyimpan kelas yang digunakan adalah
className
.Jadi bisa dibilang:
Jika Anda menginginkan lokasi yang menunjukkan kepada Anda bagaimana jQuery melakukan segalanya, saya sarankan:
http://code.jquery.com/jquery-1.5.js
sumber
match
Atribut datang berguna lagi! Benarkah jQuery melakukan sesuatu yang lebih dari yang dimungkinkan dalam JavaScript ?! Jika tidak, jQuery hanyalah beban singkat yang tidak perlu.myclass-something
, seperti\b
cocok dengan tanda hubung.sumber
Fungsi hasClass:
fungsi addClass:
fungsi removeClass:
sumber
Saya menggunakan solusi sederhana / minimal, satu baris, lintas browser, dan bekerja dengan browser lawas juga:
Metode ini hebat karena tidak memerlukan polyfill dan jika Anda menggunakannya
classList
itu jauh lebih baik dalam hal kinerja. Setidaknya untuk saya.Pembaruan: Saya membuat polyfill kecil yang merupakan solusi menyeluruh yang saya gunakan sekarang:
Untuk manipulasi kelas lainnya, lihat file lengkap di sini .
sumber
notmyClassHere
?!/myClass/.test(document.body.className)
perhatikan juga!
simbolnya.thisIsmyClassHere
.solusi yang baik untuk ini adalah bekerja dengan classList dan mengandung.
saya melakukannya seperti ini:
Jadi, Anda perlu elemen Anda dan periksa daftar kelas. Jika salah satu kelas sama dengan yang Anda cari akan mengembalikan true jika tidak, itu akan kembali salah!
sumber
Gunakan sesuatu seperti:
sumber
myHTMLSelector.classList.indexOf('the-class')
? Bukankah Anda juga ingin>=0
pada akhirnya?[].indexOf
jikaclassList
memilikicontains
metode?myHTMLSelector.classList.indexOf('the-class')
mengembalikan kesalahan itumyHTMLSelector.classList.indexOf is not a function
karenamyHTMLSelector.classList
bukan array. Tapi saya kira ketika menyebutnya menggunakanArray.prototype
beberapa konversi terjadi. Ini mungkin mendukung browser yang lebih lama, walaupuncontains
memiliki dukungan yang sangat baik.sumber
Fungsi 'hasClass' ini berfungsi di IE8 +, FireFox dan Chrome:
sumber
Yah semua jawaban di atas cukup bagus tapi di sini ada fungsi sederhana kecil yang saya lakukan. Ini bekerja dengan cukup baik.
sumber
classList
punyacontains
metode?Apa pendapat Anda tentang pendekatan ini?
https://jsfiddle.net/5sv30bhe/
sumber
class="nothatClassIsnt"
?Inilah cara paling sederhana:
sumber