hasclass - jquery get class of element
jQuery hasClass()-busca más de una clase (11)
Con:
if(element.hasClass("class"))
Puedo verificar una clase, pero ¿hay alguna manera fácil de verificar si "elemento" tiene alguna de muchas clases?
Estoy usando:
if(element.hasClass("class") || element.hasClass("class") ... )
Lo cual no está mal, pero estoy pensando en algo como:
if(element.hasClass("class", "class2")
Lo cual desafortunadamente no funciona.
¿Hay algo como eso?
¿Qué hay de esto?
$.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;
}
});
Fácil de usar,
if ( $("selector").hasClasses("class1, class2, class3") ) {
//Yes It does
}
Y parece ser más rápido, http://jsperf.com/hasclasstest/7
¿Qué tal esto?
if (element.hasClass("class1 class2")
Aquí hay una respuesta que sigue la sintaxis de $ (element) .hasAnyOfClasses ("class1", "class2", "class3"):
(function($){
$.fn.hasAnyOfClasses = function(){
for(var i= 0, il=arguments.length; i<il; i++){
if($self.hasClass(arguments[i])) return true;
}
return false;
}
})(jQuery);
no es el más rápido, pero es inequívoco y la solución que prefiero. banco: http://jsperf.com/hasclasstest/10
Esto funcionó para mí
Esto para Hasclass
element.hasClass(''class1'') || element.hasClass(''class2'')
Esto es
element.is(''.class1,.class2'')
Esto funcionó para mí:
$(''.class1[class~="class2"]'').append(''something'');
Qué pasa:
if($(''.class.class2.class3'').length > 0){
//...
}
Qué tal si:
element.is(''.class1, .class2'')
usar la función predeterminada match () js:
if( element.attr(''class'') !== undefined && element.attr(''class'').match(/class1|class2|class3|class4|class5/) ) {
console.log("match");
}
para usar variables en expresiones regulares, usa esto:
var reg = new RegExp(variable, ''g'');
$(this).match(reg);
por cierto, esta es la forma más rápida: http://jsperf.com/hasclass-vs-is-/22
filter() es otra opción
Reduzca el conjunto de elementos coincidentes a aquellos que coinciden con el selector o pase la prueba de la función.
$(selector).filter(''.class1, .class2''); //Filter elements: class1 OR class2
$(selector).filter(''.class1.class2''); // Filter elements: class1 AND class2
element.is(''.class1, .class2'')
funciona, pero es un 35% más lento que element.hasClass(''class1'') || element.hasClass(''class2'')
element.hasClass(''class1'') || element.hasClass(''class2'')
Si dudas de lo que digo, puedes verificar en jsperf.com .
Espero que esto ayude a alguien.
$.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'']);
Esto debería hacerlo, simple y fácil.