jQuery hasClass() – 检查多个类

附:

if(element.hasClass("class")) 

我可以检查一个类,但有一个简单的方法来检查“元素”是否有许多类中的任何一个?

我在用:

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

这不是太糟糕,但我正在想像的东西:

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

其中不幸的是不工作。

有没有这样的事情?

怎么样:

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

element.is('.class1, .class2')起作用, element.hasClass('class1') || element.hasClass('class2') 慢35% element.hasClass('class1') || element.hasClass('class2') element.hasClass('class1') || element.hasClass('class2')
在这里输入图像描述
如果你怀疑我说什么,你可以在jsperf.com上进行validation。
希望这可以帮助别人。

 $.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']); 

这应该做到这一点,简单和容易。

filter()是另一个选项

将匹配元素的集合减less为匹配select器或通过函数testing的元素。

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

这里有一个符合$(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); 

这不是最快的,但它是明确的,我喜欢的解决scheme。 工作台: http : //jsperf.com/hasclasstest/10

这为我工作

这为Hasclass

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

是因为

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

这个怎么样?

if (element.hasClass("class1 class2")

那这个呢,

 $.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; } }); 

使用方便,

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

它似乎更快, http://jsperf.com/hasclasstest/7

关于什么:

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

这对我工作:

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

使用默认的js match()函数:

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

在正则expression式中使用variables,使用这个:

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

顺便说一下,这是最快的方法: http : //jsperf.com/hasclass-vs-is-stackoverflow/22