使用 jQuery 获取元素的类列表

IT技术 javascript jquery html
2021-01-25 17:43:43

jQuery 中有没有办法循环遍历或分配给数组的所有分配给元素的类?

前任。

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

我将在上面的“dolor_spec”中寻找一个“特殊”类。我知道我可以使用 hasClass() 但当时可能不一定知道实际的类名。

6个回答

您可以使用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
    }
});
自己添加一个 jQuery 插件: $.fn.classList = function() {return this[0].className.split(/\s+/);};
2021-03-23 17:43:43
这正是我所做的,但我不确定是否有内置的 jQuery 函数可以为您提供类的集合。
2021-03-30 17:43:43
仅供参考:jQuery 使用 className.split(/\s+/)
2021-04-08 17:43:43

为什么没有人简单列出。

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

编辑:拆分/\s+/而不是' '修复@ MarkAmery的反对意见。(感谢@ YashaOlatoto。)

@MarkAmery 是对的。如果你有一个class="foo <lots of spaces here> bar",你最终会得到一个包含空字符串元素的数组。
2021-03-24 17:43:43
@JacobvanLingen 在现代浏览器中,类之间是否可能有很多空格?
2021-03-29 17:43:43
哈哈,真的!我只想要这个。它返回一串由空格分隔的类,所以也许如果你想选择其中一个,你可以按空格分割字符串并获得一个数组来从中选择一个类
2021-04-01 17:43:43
因为错了!类可以用任何类型的空格分隔(例如,您可以将 HTML 中的长类属性包装到多行中),但是这个答案没有考虑到这一点。尝试粘贴$('<div class="foo bar baz">').attr("class").split(' ')到您的浏览器控制台(那里有一个制表符);你会得到["foo", "bar baz"]而不是正确的类列表["foo", "bar", "baz"]
2021-04-01 17:43:43
这是接受的答案的一部分......我需要应用于元素的所有类。
2021-04-02 17:43:43

在支持的浏览器上,您可以使用 DOM 元素的classList属性。

$(element)[0].classList

它是一个类似数组的对象,列出元素所具有的所有类。

如果您需要支持不支持该classList属性的旧浏览器版本,链接的 MDN 页面还包含一个 shim - 尽管即使是 shim 也无法在 IE 8 以下的 Internet Explorer 版本上工作。

@Marco Sulla:除了支持过时的软件之外,这确实还有一个缺点。 .classList不是真正的数组,并且诸如此类的方法.indexOf(⋯)对它不起作用。它只是一个“类数组对象”,而.className.split(/\s+/).indexOf(⋯)(来自接受的答案)有效。
2021-03-24 17:43:43
您可以轻松地将任何迭代转换为Arrayusing[...iterable]Array.from(iterable)
2021-04-02 17:43:43

这是一个 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
    }
);

这是我设置用来演示和测试的 jsFiddle http://jsfiddle.net/GD8Qn/8/

缩小的 Javascript

;!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")

它返回元素的所有当前类的列表。

我不知道。但这是从 DOM 元素获取属性的正确方法。而“classList”就是这样的属性,它为您提供了应用于元素的 css 类数组。
2021-03-18 17:43:43
@Métoule 也 .prop('classList') 可能不适用于 IE9中的 HTML 元素。
2021-03-24 17:43:43
@Dennis98 很好,我有时会忘记最近新功能出现的速度有多快。我也做过普通的 js,.classList它在现代浏览器中运行良好
2021-03-28 17:43:43
请注意,该classList属性不适用于 IE 10/11 的 SVG 元素(尽管它适用于 HTML 元素)。developer.mozilla.org/en-US/docs/Web/API/Element/classList
2021-03-29 17:43:43
@RozzA 也许当时不可用?但我想说这是目前最合适的方法,除非你不使用 jQuery,其中一个简单.classList的解决方案 - 你只需要注意不一致和/或缺少浏览器支持..
2021-04-03 17:43:43