我认为这个问题没有jQuery的解决方法,所以这里是我的解决方案:
$('[class*=col]').each(function() {
this.className = $.grep(this.className.split(' '), function(el) {
return !/^col/.test(el);
}).join(' ');
});
代码片段
基本上,它选择具有类中的col
的元素,并迭代这些元素,迭代它们的类并删除以col
开头的那些类。
或者无需正则表达式:
$('[class*=col]').each(function() {
this.className = $.grep(this.className.split(' '), function(cl) {
return cl.lastIndexOf('col', 0);
}).join(' ');
});
Fiddle
使用一个修改过的答案。如果类以col
开头,则lastIndexOf
将返回0
,这是一个假值,因此grep
将删除它。如果类不以col
开头,则返回-1
,这是一个真值。您还可以使用return cl.lastIndexOf('col', 0) !== 0;
来提高可读性。
或者只使用正则表达式:
$('[class*=col]').each(function() {
this.className = this.className.replace(/(^| )col[^ ]*/g, '');
});
Fiddle
这个选择器的作用是匹配字符串开头或空格后的 col
,并将其与所有前导字符一起删除,直到另一个空格或字符串结尾。
参考资料
当然,这个选择器并不是最优的 - 如果一个元素有 foocol
,$('[class*=col]')
将会选中它,但是 $.grep
/正则表达式将不会将其删除,因为它不是以 col
开头的。我想不到更好的选择器(在我看来,在空格分隔列表中选择以部分字符串开头的值的属性选择器不存在),不过这应该足够好了。