回答:
どうですか:
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
何について:
if($('.class.class2.class3').length > 0){
//...
}
> 0
。長さがゼロ以外の場合は、trueを返します。
デフォルトのjs match()関数を使用:
if( element.attr('class') !== undefined && element.attr('class').match(/class1|class2|class3|class4|class5/) ) {
console.log("match");
}
正規表現で変数を使用するには、これを使用します:
var reg = new RegExp(variable, 'g');
$(this).match(reg);
ちなみに、これは最速の方法です:http : //jsperf.com/hasclass-vs-is-stackoverflow/22
これは私のために働きました:
$('.class1[class~="class2"]').append('something');
$('.class1.class2')
持つ要素を選択する通常の方法は、2番目のクラスに属性セレクターを使用する必要がないことです。また、問題は、すべてではなく、いずれかのクラスで要素を選択する方法を尋ねることです。