2008-11-04 11 views
172

Pracuję z jQuery i sprawdzam, czy istnieje łatwy sposób na określenie, czy element ma przypisaną konkretną klasę CSS.Określ, czy element ma klasę CSS z jQuery

Mam identyfikator elementu i klasę CSS, której szukam. Po prostu muszę umieć w instrukcji if dokonać porównania opartego na istnieniu tej klasy na elemencie.

+0

Jeśli chcesz to zrobić bez jQuery, ["hasClass" z javascript?] (Http://stackoverflow.com/q/5085567/1529630) – Oriol

Odpowiedz

238

Użyj metody hasClass:

jQueryCollection.hasClass(className); 

lub

$(selector).hasClass(className); 

Argumentem jest (oczywiście) ciąg reprezentujący klasę podczas sprawdzania i zwraca wartość logiczną (więc nie obsługuje łańcuchowanie jak większość metod jQuery).

Uwaga: Jeśli zdać className argumentu, który zawiera spacje, to zostanie dopasowane dosłownie przed className ciąg ELEMENTY Collection. Więc jeśli na przykład masz element,

<span class="foo bar" /> 

wówczas powróci true:

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

a te powrócą false:

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

Dokładnie. Dokumentacja tutaj: http://docs.jquery.com/Traversing/hasClass –

+4

Nie zgadzam się. Dokumentacja jest uporządkowana według kategorii, ale wszystkie metody można łatwo zobaczyć alfabetycznie. Wszystko pochodzi z przykładu, a sekcja komentarzy zwykle usuwa wszystko, co zostało pominięte. jQuery ma wiele doskonałych funkcji i narzędzi, a odkrycie ich wszystkich wymaga trochę nauki. -EDIT - To ma sens, zdecydowanie minęło wiele czasu. – Trafalmadorian

+1

@ Trafalmadorian, usunąłem mój oryginalny komentarz, ponieważ sytuacja się zmieniła. Pierwotnie opublikowałeś wszystko przed -EDIT-, a ja odpowiedziałem, że mój komentarz dotyczący jakości dokumentacji nie jest już odpowiedni, ale odnosiłem się do ich poprzedniego (MediaWiki) systemu. Następnie skasowałeś swój poprzedni komentarz i wysłałeś go z -EDIT-. Mam nadzieję, że to oczyszczenie będzie trochę bardziej przejrzyste i mniej mylące dla przyszłych czytelników. – eyelidlessness

20

z FAQ

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

czyli

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

ostrożnie z .is() - "Jest() metoda w jQuery zwróci wartość true, jeśli DOWOLNY element z bieżącej kolekcji pasuje do DOWOLNYCH elementów w kolekcji opartej na obiekcie "- http://www.bennadel.com/blog/1725-jQuery-s-is-Method- Checks-For-Any-Matching-Elements.htm – zack

11

Co do negacji, jeśli chcesz wiedzieć, czy element ma klasę nie można po prostu zrobić jak powiedział Mark.

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

Bez jQuery:

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

Lub:

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'); 

To WAY szybciej niż jQuery!

+0

dlaczego robisz '... && !! (('' + e.classname + '') .indexOf ('' + c + '') +1)', i nie tylko '&&! ('' + e.classname + '') .indexOf ('' + c + '')'? – Blexy

+1

Ponieważ 'indexOf' zwraca' -1', klasa nie istnieje. Jeśli zrobię "!! - 1", będzie to "prawda". Ponieważ robię '!! - 1 + 1', będzie to fałsz. Lepszym sposobem byłoby '... && !! ~ ('' + e.className + '') .indexOf ('' + c + '')', ale nie pamiętałem go w tym czasie. –

+0

Przepraszamy, miałem na myśli '... && ~ ('' + e.className + '') .indexOf ('' + c + '') –

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

W moim przypadku użyłem „jest” funkcją jQuery, miałem elementu HTML z różnych klas css dodanych, szukałem konkretnej klasy w środku nich, więc użyłem " jest "dobrą alternatywą do sprawdzenia klasy dynamicznie dodanej do elementu html, który ma już inne klasy css, jest to kolejna dobra alternatywa.

prosty przykład:

<!--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'); 

zaawansowany przykład:

<!--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(); 
    } 
0

W trosce o pomoc kogoś, kto wyląduje tutaj, ale faktycznie patrząc na jQuery wolnej drodze w ten sposób:

element.classList.contains('your-class-name') 
Powiązane problemy