jQuery中是否有一种方法可以循环遍历或分配给数组中所有被分配给元素的类?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
我将寻找一个“特殊”类,如上面的“dolor_spec”。我知道我可以使用hasClass(),但实际的类名可能并不一定知道。
jQuery中是否有一种方法可以循环遍历或分配给数组中所有被分配给元素的类?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
我将寻找一个“特殊”类,如上面的“dolor_spec”。我知道我可以使用hasClass(),但实际的类名可能并不一定知道。
当前回答
更新:
正如@莱恩·伦纳德指出的那样,我的回答并没有真正解决我自己提出的问题……你需要修剪和删除双空格(例如)字符串。替换(/ +/g, " ")..或者你可以分开坐电车。然后使用(例如)arr.filter(Boolean)删除空值。
const classes = element.className.split(' ').filter(Boolean);
或者更现代
const classes = element.classList;
旧:
对于所有给出的答案,你不应该忘记使用.trim()(或$.trim())
因为类会被添加和删除,所以在类字符串之间可能会有多个空格。如。'class1 class2 class3'..
这将变成[class1, class2 ','','','', ' 类别3 ']. .
当你使用修剪,所有的多个空格被删除。
其他回答
在支持的浏览器上,你可以使用DOM元素的classList属性。
$(element)[0].classList
它是一个类似数组的对象,列出元素的所有类。
如果您需要支持不支持classList属性的旧浏览器版本,则链接的MDN页面还为它包含了一个shim -尽管即使是shim也不能在ie8以下的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
缩小的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);
获取应用于元素的类列表,我们可以使用
$('#elementID').prop('classList')
要添加或删除任何类,我们可以按照下面的步骤。
$('#elementID').prop('classList').add('yourClassName')
$('#elementID').prop('classList').remove('yourClassName')
为了简单地检查类是否存在,我们可以使用hasClass
有点晚了,但是使用extend()函数可以让你在任何元素上调用“hasClass()”,例如: var hasClass = $('#divId').hasClass(' someeclass ');
(function($) {
$.extend({
hasClass: new function(className) {
var classAttr = $J(this).attr('class');
if (classAttr != null && classAttr != undefined) {
var classList = classAttr.split(/\s+/);
for(var ix = 0, len = classList.length;ix < len;ix++) {
if (className === classList[ix]) {
return true;
}
}
}
return false;
}
}); })(jQuery);
$('div').attr('class').split(' ').each(function(cls){ console.log(cls);})