Menentukan apakah suatu elemen memiliki kelas CSS dengan jQuery


173

Saya bekerja dengan jQuery dan mencari untuk melihat apakah ada cara mudah untuk menentukan apakah elemen memiliki kelas CSS spesifik yang terkait dengannya.

Saya memiliki id elemen, dan kelas CSS yang saya cari. Saya hanya perlu bisa, dalam pernyataan if, melakukan perbandingan berdasarkan keberadaan kelas itu pada elemen.


1
Jika Anda ingin melakukannya tanpa jQuery, “hasClass” dengan javascript?
Oriol

Jawaban:


237

Gunakan hasClassmetode:

jQueryCollection.hasClass(className);

atau

$(selector).hasClass(className);

Argumennya adalah (jelas) string yang mewakili kelas yang Anda periksa, dan mengembalikan boolean (sehingga tidak mendukung perangkaian seperti kebanyakan metode jQuery).

Catatan: Jika Anda memberikan classNameargumen yang berisi spasi, itu akan dicocokkan secara harfiah dengan classNamestring elemen koleksi . Jadi jika, misalnya, Anda memiliki elemen,

<span class="foo bar" />

maka ini akan kembali true:

$('span').hasClass('foo bar')

dan ini akan kembali false:

$('span').hasClass('bar foo')
$('span').hasClass('foo  bar')

4
Saya tidak setuju. Dokumentasi diatur dalam kategori, tetapi Anda dapat dengan mudah melihat semua metode juga secara alfabet. Semuanya datang dengan contoh, dan bagian komentar biasanya membersihkan semua yang tertinggal. jQuery memiliki BANYAK fungsi dan utilitas luar biasa dan perlu beberapa pembelajaran untuk menemukan semuanya. -EDIT- Itu masuk akal, itu pasti datang jauh.
Trafalmadorian

1
@Trafalmadorian, saya telah menghapus komentar asli saya karena situasinya telah berubah. Awalnya Anda telah memposting semuanya sebelum -EDIT-, dan saya menjawab bahwa komentar saya tentang kualitas dokumentasi tidak lagi relevan tetapi merujuk pada sistem mereka sebelumnya (MediaWiki). Anda kemudian menghapus komentar Anda sebelumnya dan beristirahat dengan -EDIT-. Saya harap pembersihan ini sedikit lebih jelas dan tidak menyesatkan pembaca di masa mendatang.
kelopak mata

@daniloquio, itu adalah jika Anda pergi langsung ke api.jquery.com ... untuk beberapa alasan website masih link ke versi wiki mengerikan di docs.jquery.com
eyelidlessness

21

dari FAQ

elem = $("#elemid");
if (elem.is (".class")) {
   // whatever
}

atau:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}

3
hati-hati dengan .is () - "Metode is () di jQuery akan mengembalikan true jika APA SAJA dari elemen dalam koleksi saat ini cocok dengan APA SAJA elemen dalam koleksi berbasis is" - bennadel.com/blog/…
zack

11

Adapun negasi, jika Anda ingin tahu jika suatu elemen tidak memiliki kelas, Anda bisa melakukan seperti kata Mark.

if (!currentPage.parent().hasClass('home')) { do what you want }

3

Tanpa jQuery:

var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1;

Atau:

function hasClass(e,c){
    return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1);
}
/*example of usage*/
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium');

Ini WAY lebih cepat dari jQuery!


mengapa kamu lakukan ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1), dan bukan hanya &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy

1
Karena indexOfpengembalian -1adalah kelas tidak ada. Jika saya melakukannya !!-1, itu akan menjadi true. Karena saya lakukan !!-1+1, itu akan salah. Cara yang lebih baik adalah ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), tetapi saya tidak ingat saat itu.
Ismael Miguel

Maaf, maksud saya...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel

3

Demi membantu siapa pun yang mendarat di sini tetapi sebenarnya mencari cara jQuery gratis untuk melakukan ini:

element.classList.contains('your-class-name')


0
 $('.segment-name').click(function () {
    if($(this).hasClass('segment-a')){
        //class exist
    }
});

0

Dalam kasus saya, saya menggunakan fungsi 'is' jQuery, saya menambahkan elemen HTML dengan kelas css berbeda, saya mencari kelas tertentu di tengahnya, jadi saya menggunakan "is" alternatif yang baik untuk memeriksa kelas yang secara dinamis ditambahkan ke elemen html, yang sudah memiliki kelas css lainnya, itu adalah alternatif lain yang bagus.

contoh sederhana:

 <!--element html-->
 <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

 <!--jQuery "is"-->
 $('#menu').is('.cbp-spmenu-open');

contoh lanjutan:

 <!--element html-->
    <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

   <!--jQuery "is"-->
    if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){
       $("#menu").show();
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.