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

Javascript/jQuery:如何删除一系列编号的类?,javascript,jquery,Javascript,Jquery,可能重复: 我有一个脚本,它在正文中随机添加了六个类中的一个。类的编号介于1和6之间,如下所示: 主题1至主题6 我需要一个干净的方法来移除所有这些。现在我有这个: $('body').removeClass('theme-1'); $('body').removeClass('theme-2'); $('body').removeClass('theme-3'); $('body').removeClass('theme-4'); $('body').removeClass('theme-5

可能重复:

我有一个脚本,它在正文中随机添加了六个类中的一个。类的编号介于1和6之间,如下所示:

主题1至主题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-1到theme-6之间的任何类?

您可以在循环中清除它们,这至少是一点清理。

您可以在循环中清除它们,这至少是一点清理。

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

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

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

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

您可以将所有内容合并到一行:

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

或者使用一个循环,但是如果类始终在1到6之间,则循环就个人而言似乎有些过分。

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

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

或者使用循环,但如果类始终在1到6之间,则循环就个人而言似乎有些过分。

如果您不知道可能有多少个循环,则应使用正则表达式:

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').removeClass();

如果您不知道可能有多少个,则应使用正则表达式:

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').removeClass();
回答。Pat的代码如下:

$('body')[0].className.replace(/\theme-.*?\b/g, '');
但普雷斯托尔的回答看起来也不错。使用此功能:

function removeClassByPrefix(el, prefix) {
    var regx = new RegExp('\\b' + prefix + '.*?\\b', 'g');
    el.className = el.className.replace(regx, '');
    return el;
}
回答。Pat的代码如下:

$('body')[0].className.replace(/\theme-.*?\b/g, '');
但普雷斯托尔的回答看起来也不错。使用此功能:

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

为什么要调用.removeClass函数6次,当它可以接受多个类并在一次调用中全部删除?谢谢vega的好建议。谢谢vega,我删除了这个。为什么要调用.removeClass函数6次,当它可以接受多个类并在一次调用中全部删除?谢谢vega的好建议。谢谢vega,我删除了这个。那你为什么不把这个问题作为一个副本来结束呢?只是把它标记为一个副本。非常感谢你的提示!那你为什么不把这个问题作为一个重复的问题结束呢?只是把它标记为一个重复的问题。非常感谢你的提示!