2013-02-01 13 views
2

可能重复:
Remove all classes that begin with a certain stringJavascript/jQuery:如何删除一系列编号的类?

我有一个脚本,它增加了一个六类随机身体。类别编号介于1和6之间,如下所示:

theme-1theme-6

我需要一个干净的方式来删除它们。现在我有这个:

$('body').removeClass('theme-1'); 
$('body').removeClass('theme-2'); 
$('body').removeClass('theme-3'); 
$('body').removeClass('theme-4'); 
$('body').removeClass('theme-5'); 
$('body').removeClass('theme-6'); 

但它是一种笨重的权利?有没有一种方法可以说“删除theme-1theme-6之间的任何类别”?

回答

3

您可以使用循环索引来生成类名称。

classes = "" 
for(i=1; i < 7; i++) 
    classes += 'theme-' + i + " "; 
$('body').removeClass(classes); 
+1

为什么叫'.removeClass'功能的6倍时,它可以接受多个类,并删除这一切在1个电话吗? –

+0

谢谢vega很好的建议。 – Adil

+0

谢谢维加,我删除了这个。 – shrewdbeans

0

你可以在一个循环中清理它们,至少是一点清洁。

1

你可以在一个行这一切结合起来:

$('body').removeClass('theme-1 theme-2 theme-3 theme-4 theme-5 theme-6'); 

或者使用一个循环,但如果类总是 1和6之间的循环,似乎有点小题大做个人。

0

如果你不知道你可能有多少的都有,你应该使用正则表达式:

document.body.className = document.body.className.replace(/(^|)theme-\d+(|$)/g, ' '); 

如果你想留在jQuery的API中,使用此:

$('body').attr('class', function (i, className) { 
    return className.replace(/(^|)theme-\d+(|$)/g, ' '); 
}); 

如果你没有对body任何其他类,你可以将它们全部删除一举:

$('body').removeClass(); 
0

答案posted here。从Pat的代码如下:

$('body')[0].className.replace(/\theme-.*?\b/g, ''); 

但是从Prestaul这个答案看起来一样好。使用此功能:

function removeClassByPrefix(el, prefix) { 
    var regx = new RegExp('\\b' + prefix + '.*?\\b', 'g'); 
    el.className = el.className.replace(regx, ''); 
    return el; 
} 
+0

那你为什么不把这个问题作为重复来解决? –

+0

只是将它标记为伪装。非常感谢提示! – JakeGould