我有一个脚本,可以将6个类中的一个随机添加到正文中。这些类的编号在1到6之间,如下所示:
theme-1
至theme-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
之间的任何课程”?
答案 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 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;
}
答案 5 :(得分:0)
$('body').removeClass('theme-1 theme-2 theme-3 theme-4 theme-5 theme-6');