这里有几个简单的js例程:
function addClass( element, name, remove ){
if ( element.className ) {
var re = new RegExp(
'(^|\\s+)' +
name.replace(/([^a-zA-Z0-9])/gi, '\\$1') +
'(\\s+|$)',
'g'
);
if ( remove ) {
element.className = element.className.replace( re, '' );
}
else if ( !re.test( element.className ) ) {
element.className += ' ' + name;
}
}
else if ( !remove ) {
element.className = name;
}
};
function removeClass( element, name ){
return addClass( element, name, true );
};
上面没有检查任何可能破坏RegExp
作为类名一部分的特殊字符. 但话又说回来,在我看来,你应该只真正拥有_
或-
超越字母和数字。
更新
我现在添加了一些保护,它应该转义任何非字母数字字符。
更新 2
正如 zzzzBov 正确指出的那样,存在与类名末尾不匹配的错误,现在应该更正。它现在还在添加类之前进行检查,以确保之前不存在该类。我还删除了不区分大小写。
我很想知道name.replace(/([^a-zA-Z0-9])/gi, '\\$1')
可能会导致什么问题,因为除了过度转义之外,我不确定什么可能是问题——在合理的范围内——这些信息对将来找到这个 QA 的人有用。