我怎样才能做到这一点:
我有具有多个类的对象。我的目标是获取其中包含字符串(例如'toaster')的类名(或以该字符串开头)并将其放入变量中。请注意,我只知道类名的开头,我需要完整。
例如<div class="writer quite-good toaster-maker"></div>
我有这个 div 作为我的 jQuery 对象,我只需要将类名toaster-maker
放在变量中className
;
同样,我不需要选择对象!我只需要将类名放入变量中。
我怎样才能做到这一点:
我有具有多个类的对象。我的目标是获取其中包含字符串(例如'toaster')的类名(或以该字符串开头)并将其放入变量中。请注意,我只知道类名的开头,我需要完整。
例如<div class="writer quite-good toaster-maker"></div>
我有这个 div 作为我的 jQuery 对象,我只需要将类名toaster-maker
放在变量中className
;
同样,我不需要选择对象!我只需要将类名放入变量中。
正则表达式在这里似乎更有效:
classNames = div.attr("class").match(/[\w-]*toaster[\w-]*/g)
返回所有包含“toaster”的类名(如果没有,则返回一个空数组)。
尝试这个,
var names = $('[class*=toaster]').attr('class').split(' ');
var className;
$.each(names, function(){
if (this.toLowerCase().indexOf("toaster") >= 0)
className = this;
})
console.log(className);
小提琴在这里。您还可以将 className 作为数组并将匹配的类名推送给它。
因此,假设您已经有一个带有该 div 的 jQuery 对象,您可以获取class
属性的值,将字符串拆分为类名,遍历它们并查看哪个包含toaster
:
var className = '';
$.each($element.attr('class').split(/\s+/), function(i, name) {
if (name.indexOf('toaster') > -1) { // or name.indexOf('toaster') === 0
className = name;
return false;
}
});
jQuery 没有为此提供特定的功能。
如果您有多个要提取类名的元素,可以使用.map
:
var classNames = $elements.map(function() {
$.each(this.className.split(/\s+/), function(i, name) {
if (name.indexOf('toaster') > -1) { // or name.indexOf('toaster') === 0
return name;
}
});
}).get();
classNames
然后将是一个类名数组。
在支持的浏览器中.classList
,也可以使用$.each(this.classList, ...)
代替$.each(this.className.split(/\s+/), ...)
。