我需要根据类名开头找到一个类,然后将完整的类名添加到另一个元素。
widgets.js
<div class="slide theme-light-blue">Test</div>
<div class="result"></div>
我认为我通过使用正则表达式找到所有以“theme-”开头的类来获得第一部分,但我不知道如何将完整的类名存储为可以添加到另一个元素的变量。在此示例中,我希望将类“var theme = $('[class^="theme-"]').filter(function() {
return this.className.match(/(?:^|\s)theme-/);
});
$(".result").addClass(theme);
”添加到theme-light-blue
div。
我在这里的代码不起作用。
请参阅fiddle here。
答案 0 :(得分:2)
首先你应该使用&#39;属性包含&#39; selector用于查找具有theme-*
类的元素,因为它可能不一定是应用于该元素的第一个类。您对filter()
的使用也是不正确的,因为它用于根据提供的过滤器减少匹配的元素集,并返回jQuery对象,而不是字符串。
要实现您的要求,您可以遍历每个classList
元素的.theme-*
属性,并将该类应用于页面中的下一个.result
元素。试试这个:
$('[class*="theme-"]').each(function() {
for (var i = 0; i < this.classList.length; i++) {
if (this.classList[i].indexOf('theme-') == 0)
$(this).next('.result').addClass(this.classList[i]);
}
});
这显然假设只有一个theme-*
类应用于元素。
答案 1 :(得分:0)
如果你在每种情况下都有第二堂课,那么你可以使用属性getter(split()
)来获得你的选择课,并用var theme = $('[class^="theme-"]').attr('class')[0].split(' ')
.filter(function(a){return a.match(/(?:^|\s)theme-/)
})[0];
$(".result").addClass(theme);
{{1}}