2

可能重复:
删除所有以某个字符串开头的类

我有一个脚本,可以将六个类中的一个随机添加到正文中。这些类的编号在 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');

但这有点笨拙对吧?有没有办法我可以说“删除 to 之间theme-1的任何类theme-6”?

4

6 回答 6

3

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

classes = ""
for(i=1; i < 7; i++)
   classes += 'theme-' + i + " ";
$('body').removeClass(classes);
于 2013-02-01T16:07:51.877 回答
1

您可以将它们全部合并为一行:

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

或者使用循环,但如果类总是在 1 到 6 之间,那么循环对个人来说似乎是多余的。

于 2013-02-01T16:07:52.497 回答
0

您可以在循环中清除它们,这至少更干净一些。

于 2013-02-01T16:07:27.120 回答
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();
于 2013-02-01T16:09:40.330 回答
0

答案张贴在这里。来自的代码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;
}
于 2013-02-01T16:10:02.190 回答
0
$('body').removeClass('theme-1 theme-2 theme-3 theme-4 theme-5 theme-6');

http://jsfiddle.net/Yms5M/

于 2013-02-01T16:11:54.143 回答