Answers:
怎么样:
element.is('.class1, .class2')
.hasClass()
但是您的解决方案似乎已经解决了问题,谢谢
$('element').is('.class1.class2')
没有用,但对我来说
.class1.class2
将匹配元素有两个班,但他们正在寻找匹配的元素或者类。
element.is('.class1, .class2')
的作品,但它是35%慢比
element.hasClass('class1') || element.hasClass('class2')
如果您怀疑我在说什么,可以在jsperf.com上进行验证。
希望这可以帮助某人。
$.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']);
这应该做到,简单又容易。
这是一个确实遵循以下语法的答案
$(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);
它不是最快的,但是它是明确的,也是我更喜欢的解决方案。板凳:http://jsperf.com/hasclasstest/10
Error: $self is not defined
var $self = $(this);
只是在for循环之前
那这个呢,
$.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
使用默认的js match()函数:
if( element.attr('class') !== undefined && element.attr('class').match(/class1|class2|class3|class4|class5/) ) {
console.log("match");
}
要在regexp中使用变量,请使用以下命令:
var reg = new RegExp(variable, 'g');
$(this).match(reg);
顺便说一下,这是最快的方法:http : //jsperf.com/hasclass-vs-is-stackoverflow/22
这对我有用:
$('.class1[class~="class2"]').append('something');
$('.class1.class2')
不需要为第二个类使用属性选择器。另外,问题是要问如何通过任何而不是所有类之一来选择元素。