Javascript / jQuery:如何删除一系列编号的类?

时间:2013-02-01 16:06:03

标签: javascript jquery

  

可能重复:
  Remove all classes that begin with a certain string

我有一个脚本,可以将6个类中的一个随机添加到正文中。这些类的编号在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之间的任何课程”?

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

或者使用一个循环,但如果类总是在1到6之间,那么循环看起来就像个人一样过分。

答案 2 :(得分:0)

你可以在一个循环中清除它们,这至少会更清洁。

答案 3 :(得分: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();

答案 4 :(得分:0)

回答posted herePat的代码如下:

$('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;
}

答案 5 :(得分:0)

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

http://jsfiddle.net/Yms5M/