[jquery] 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')

작동 하지만, 그건 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']);

간단하고 쉬운 방법입니다.


답변

filter () 는 다른 옵션입니다

일치하는 요소 세트를 선택기와 일치하는 요소로 줄이거 나 함수의 테스트를 통과하십시오.

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

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


답변

이건 어때요?

if (element.hasClass("class1 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);

가장 빠르지는 않지만 모호하지 않은 솔루션을 선호합니다. 벤치 : http://jsperf.com/hasclasstest/10


답변

이건 어때?

$.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