Déterminer si un élément a une classe CSS avec jQuery


173

Je travaille avec jQuery et je cherche à voir s'il existe un moyen simple de déterminer si l'élément a une classe CSS spécifique associée.

J'ai l'id de l'élément et la classe CSS que je recherche. J'ai juste besoin de pouvoir, dans une instruction if, faire une comparaison basée sur l'existence de cette classe sur l'élément.


1
Si vous voulez le faire sans jQuery, «hasClass» avec javascript?
Oriol

Réponses:


237

Utilisez la hasClassméthode:

jQueryCollection.hasClass(className);

ou

$(selector).hasClass(className);

L'argument est (évidemment) une chaîne représentant la classe que vous vérifiez, et il renvoie un booléen (il ne prend donc pas en charge le chaînage comme la plupart des méthodes jQuery).

Remarque: Si vous passez un classNameargument contenant des espaces, il sera mis en correspondance littéralement avec la classNamechaîne des éléments de la collection . Donc si, par exemple, vous avez un élément,

<span class="foo bar" />

alors cela retournera true:

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

et ceux-ci reviendront false:

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

4
Je ne suis pas d'accord. La documentation est organisée en catégories, mais vous pouvez également voir toutes les méthodes par ordre alphabétique. Tout est livré avec un exemple et la section des commentaires clarifie généralement tout ce qui est laissé de côté. jQuery a BEAUCOUP d'excellentes fonctions et utilitaires et il faut un peu d'apprentissage pour les découvrir tous. -EDIT- Cela a du sens, c'est vraiment un long chemin.
Trafalmadorian

1
@Trafalmadorian, j'ai supprimé mon commentaire d'origine car la situation a changé. A l'origine, vous aviez tout posté avant -EDIT-, et j'ai répondu que mon commentaire sur la qualité de la documentation n'était plus pertinent mais faisait référence à leur système précédent (MediaWiki). Vous avez ensuite supprimé votre commentaire précédent et reposé avec le -EDIT-. J'espère que ce nettoyage est un peu plus clair et moins trompeur pour les futurs lecteurs.
paupière

@daniloquio, c'est si vous allez directement sur api.jquery.com ... pour une raison quelconque, le site Web renvoie toujours à la terrible version wiki à docs.jquery.com
paupière

21

de la FAQ

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

ou:

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

3
attention avec .is () - "La méthode is () dans jQuery retournera true si N'IMPORTE QUEL élément de la collection actuelle correspond à N'IMPORTE QUEL élément de la collection is-based" - bennadel.com/blog/…
zack

11

Quant à la négation, si vous voulez savoir si un élément n'a pas de classe, vous pouvez simplement faire comme Mark l'a dit.

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

3

Sans jQuery:

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

Ou:

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

C'est BIEN plus rapide que jQuery!


pourquoi faites-vous ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1), et pas seulement &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy

1
Parce que indexOfrenvoie -1est la classe n'existe pas. Si je le fais !!-1, ce le serait true. Puisque je le fais !!-1+1, ce sera faux. Une meilleure solution serait ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), mais je ne m'en souvenais pas à l'époque.
Ismael Miguel

Désolé, je voulais dire...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel

3

Dans le but d'aider quiconque atterrit ici mais cherchait en fait un moyen gratuit de le faire avec jQuery:

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


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

0

Dans mon cas, j'ai utilisé la fonction 'est' une fonction jQuery, j'ai eu un élément HTML avec différentes classes css ajoutées, je cherchais une classe spécifique au milieu de celles-ci, j'ai donc utilisé le "est" une bonne alternative pour vérifier une classe ajoutée dynamiquement à un élément html, qui a déjà d'autres classes css, c'est une autre bonne alternative.

exemple simple:

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

exemple avancé:

 <!--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();
    }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.