jQuery hasClass () – vérifie plus d’une classe

Avec:

if(element.hasClass("class")) 

Je peux vérifier pour une classe, mais y a-t-il un moyen facile de vérifier si “element” a l’une des nombreuses classes?

J’utilise:

 if(element.hasClass("class") || element.hasClass("class") ... ) 

Ce qui n’est pas trop mal, mais je pense à quelque chose comme:

 if(element.hasClass("class", "class2") 

Ce qui malheureusement ne fonctionne pas.

Y a-t-il quelque chose comme ça?

Que diriez-vous:

 element.is('.class1, .class2') 

element.is('.class1, .class2') fonctionne, mais il est 35% plus lent que element.hasClass('class1') || element.hasClass('class2') element.hasClass('class1') || element.hasClass('class2')
entrer la description de l'image ici
Si vous doutez de ce que je dis, vous pouvez vérifier sur jsperf.com .
J’espère que cela aidera quelqu’un.

 $.fn.extend({ hasClasses: function (selectors) { var self = this; for (var i in selectors) { if ($(self).hasClass(selectors[i])) return true; } return false; } }); $('#element').hasClasses(['class1', 'class2', 'class3']); 

Cela devrait le faire, simple et facile.

filter () est une autre option

Réduisez le jeu d’éléments correspondants à ceux qui correspondent au sélecteur ou passez le test de la fonction.

 $(selector).filter('.class1, .class2'); //Filter elements: class1 OR class2 $(selector).filter('.class1.class2'); // Filter elements: class1 AND class2 

voici une réponse qui suit la syntaxe de $ (element) .hasAnyOfClasses (“class1”, “class2”, “class3”):

 (function($){ $.fn.hasAnyOfClasses = function(){ for(var i= 0, il=arguments.length; i 

Ce n'est pas le plus rapide, mais c'est sans ambiguïté et la solution que je préfère. banc: http://jsperf.com/hasclasstest/10

Cela a fonctionné pour moi

Ceci pour Hasclass

 element.hasClass('class1') || element.hasClass('class2') 

Ce pour est

  element.is('.class1,.class2') 

Que dis-tu de ça?

if (element.hasClass("class1 class2")

Et ça,

 $.fn.extend({ hasClasses: function( selector ) { var classNamesRegex = new RegExp("( " + selector.replace(/ +/g,"").replace(/,/g, " | ") + " )"), rclass = /[\n\t\r]/g, i = 0, l = this.length; for ( ; i < l; i++ ) { if ( this[i].nodeType === 1 && classNamesRegex.test((" " + this[i].className + " ").replace(rclass, " "))) { return true; } } return false; } }); 

Facile à utiliser,

 if ( $("selector").hasClasses("class1, class2, class3") ) { //Yes It does } 

Et il semble être plus rapide, http://jsperf.com/hasclasstest/7

Qu’en est-il de:

 if($('.class.class2.class3').length > 0){ //... } 

Cela a fonctionné pour moi:

 $('.class1[class~="class2"]').append('something'); 

utilisez la fonction par défaut js match ():

 if( element.attr('class') !== undefined && element.attr('class').match(/class1|class2|class3|class4|class5/) ) { console.log("match"); } 

Pour utiliser des variables dans regexp, utilisez ceci:

 var reg = new RegExp(variable, 'g'); $(this).match(reg); 

en passant, c’est le moyen le plus rapide: http://jsperf.com/hasclass-vs-is-stackoverflow/22