[javascript] jQuery를 사용하여 요소의 클래스 목록 가져 오기

jQuery에서 요소에 할당 된 모든 클래스를 반복하거나 배열에 할당하는 방법이 있습니까?

전의.

<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>

위의 “dolor_spec”에서와 같이 “특별한”클래스를 찾고 있습니다. hasClass ()를 사용할 수는 있지만 실제 클래스 이름을 반드시 알 필요는 없습니다.



답변

document.getElementById('divId').className.split(/\s+/);클래스 이름 배열을 얻는 데 사용할 수 있습니다 .

그런 다음 원하는 것을 반복하고 찾을 수 있습니다.

var classList = document.getElementById('divId').className.split(/\s+/);
for (var i = 0; i < classList.length; i++) {
    if (classList[i] === 'someClass') {
        //do something
    }
}

jQuery는 실제로 당신에게 도움이되지 않습니다 …

var classList = $('#divId').attr('class').split(/\s+/);
$.each(classList, function(index, item) {
    if (item === 'someClass') {
        //do something
    }
});


답변

왜 아무도 단순히 나열되지 않았습니다.

$(element).attr("class").split(/\s+/);

편집 : @MarkAmery가 지적했듯이 .split(' ')클래스 이름을 공백으로 분리 할 수 ​​없기 때문에 할 수 없습니다 .


답변

지원되는 브라우저에서 DOM 요소의 classList속성을 사용할 수 있습니다 .

$(element)[0].classList

요소가 가진 모든 클래스를 나열하는 배열과 같은 객체입니다.

classList속성을 지원하지 않는 이전 브라우저 버전을 지원해야하는 경우 연결된 MDN 페이지에도 해당 shim이 포함됩니다. 비록 shim도 IE 8 이하의 Internet Explorer 버전에서는 작동하지 않습니다.


답변

다음은 일치하는 요소가 가진 모든 클래스의 배열을 반환하는 jQuery 플러그인입니다.

;!(function ($) {
    $.fn.classes = function (callback) {
        var classes = [];
        $.each(this, function (i, v) {
            var splitClassName = v.className.split(/\s+/);
            for (var j = 0; j < splitClassName.length; j++) {
                var className = splitClassName[j];
                if (-1 === classes.indexOf(className)) {
                    classes.push(className);
                }
            }
        });
        if ('function' === typeof callback) {
            for (var i in classes) {
                callback(classes[i]);
            }
        }
        return classes;
    };
})(jQuery);

처럼 사용

$('div').classes();

귀하의 경우에 반품

["Lorem", "ipsum", "dolor_spec", "sit", "amet"]

각 클래스에서 호출 할 메소드에 함수를 전달할 수도 있습니다.

$('div').classes(
    function(c) {
        // do something with each class
    }
);

다음은 http://jsfiddle.net/GD8Qn/8/ 을 보여주고 테스트하기 위해 설정 한 jsFiddle입니다.

축소 된 자바 스크립트

;!function(e){e.fn.classes=function(t){var n=[];e.each(this,function(e,t){var r=t.className.split(/\s+/);for(var i in r){var s=r[i];if(-1===n.indexOf(s)){n.push(s)}}});if("function"===typeof t){for(var r in n){t(n[r])}}return n}}(jQuery);


답변

이것을 시도해야합니다 :

$("selector").prop("classList")

요소의 모든 현재 클래스의 배열을 리턴합니다.


답변

var classList = $(element).attr('class').split(/\s+/);
$(classList).each(function(index){

     //do something

});


답변

최신 정보:

@Ryan Leonard가 올바르게 지적했듯이 내 대답은 실제로 내가 만든 요점을 고치지 않습니다 … 예를 들어 string.replace (/ + / g, “”)를 사용하여 이중 공백을 자르고 제거해야합니다. .. 또는 el.className을 분할 한 다음 arr.filter (Boolean)을 사용하여 빈 값을 제거 할 수 있습니다.

const classes = element.className.split(' ').filter(Boolean);

또는 더 현대

const classes = element.classList;

낡은:

주어진 모든 답변을 사용하면 사용자 .trim () (또는 $ .trim ())을 잊지 않아야합니다.

클래스가 추가 및 제거되므로 클래스 문자열 사이에 공백이 여러 개있을 수 있습니다. 예 : ‘class1 class2 class3’.

이것은 [ ‘class1’, ‘class2’, ”, ”, ”, ‘class3’]으로 바뀔 것입니다.

다듬기를 사용하면 모든 여러 공백이 제거됩니다.