Determina se un elemento ha una classe CSS con jQuery


173

Sto lavorando con jQuery e cerco di capire se esiste un modo semplice per determinare se l'elemento ha una classe CSS specifica associata.

Ho l'id dell'elemento e la classe CSS che sto cercando. Devo solo essere in grado, in una dichiarazione if, di fare un confronto basato sull'esistenza di quella classe sull'elemento.


1
Se vuoi farlo senza jQuery, "hasClass" con javascript?
Oriol,

Risposte:


237

Usa il hasClassmetodo:

jQueryCollection.hasClass(className);

o

$(selector).hasClass(className);

L'argomento è (ovviamente) una stringa che rappresenta la classe che stai controllando e restituisce un valore booleano (quindi non supporta il concatenamento come la maggior parte dei metodi jQuery).

Nota: se si passa un classNameargomento che contiene spazi bianchi, verrà confrontato letteralmente con la classNamestringa degli elementi della raccolta . Quindi se, ad esempio, hai un elemento,

<span class="foo bar" />

quindi questo restituirà true:

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

e questi restituiranno false:

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

4
Non sono d'accordo. La documentazione è organizzata in categorie, ma puoi anche vedere facilmente tutti i metodi in ordine alfabetico. Tutto viene fornito con un esempio e la sezione commenti di solito cancella tutto ciò che è stato lasciato fuori. jQuery ha MOLTE funzioni e utilità eccellenti e ci vuole un po 'di apprendimento per scoprirle tutte. -EDIT- Questo ha un senso, sicuramente ha fatto molta strada.
Trafalmadorian,

1
@Trafalmadorian, ho rimosso il mio commento originale perché la situazione è cambiata. Inizialmente avevi pubblicato tutto prima di -EDIT-, e ho risposto che il mio commento sulla qualità della documentazione non era più pertinente ma si riferiva al loro precedente sistema (MediaWiki). Hai quindi eliminato il tuo commento precedente e riposizionato con -EDIT-. Spero che questa pulizia sia un po 'più chiara e meno fuorviante per i futuri lettori.
ciglia

@daniloquio, è se vai direttamente su api.jquery.com ... per qualche ragione il sito web si collega ancora alla terribile versione wiki su docs.jquery.com
eyelidlessness

21

dalle FAQ

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

o:

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

3
attenzione con .is () - "Il metodo is () in jQuery restituirà true se QUALUNQUE degli elementi nella raccolta corrente corrispondono a QUALUNQUE degli elementi nella raccolta basata su is" - bennadel.com/blog/…
zack

11

Per quanto riguarda la negazione, se vuoi sapere se un elemento non ha una classe puoi semplicemente fare come ha detto Mark.

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

3

Senza jQuery:

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

O:

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

Questo è MODO più veloce di jQuery!


perché lo fai ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1)e non solo &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy,

1
Perché indexOfrestituisce -1è la classe non esiste. Se lo facessi !!-1, lo sarebbe true. Dal momento che sto facendo !!-1+1, sarà falso. Un modo migliore sarebbe ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), ma all'epoca non me lo ricordavo.
Ismael Miguel,

Mi dispiace, intendevo...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel,

3

Nell'interesse di aiutare chiunque arrivi qui ma in realtà stava cercando un modo jQuery gratuito per farlo:

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


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

0

Nel mio caso, ho usato 'is' una funzione jQuery, avevo un elemento HTML con diverse classi CSS aggiunte, stavo cercando una classe specifica nel mezzo di queste, quindi ho usato "is" una buona alternativa per verificare una classe aggiunta dinamicamente a un elemento html, che ha già altre classi css, è un'altra buona alternativa.

semplice esempio:

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

esempio avanzato:

 <!--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();
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.