使用自动生成的html代码,使用变量类名:table-col-44, table-col-19, table-col-121
等。
我有一个循环,正在使用this jQuery selector functionality选择这些变量类:
for(r in replace){
var targ = replace[r];
$("[class^='"+targ+"']").each(function(){
...
})
}
问题是,一旦我选择了我想要擦除的类,我找不到一种方法来定位它们以删除它们。通常这些是<p>
和<td>
标记,其他类需要保留,因此我不能完全擦除类属性。有没有办法将匹配的类作为参数传递给each()函数?或者也许jQuery附带了某种$(this).removeClass([selected])
关键字?完全被这里难住了。谢谢你的帮助!
答案 0 :(得分:2)
不确定是否有更多jQuery方法可以执行此操作,但您可以在每个内部尝试:
var newClassName = $(this).attr('class').split(' ').slice(1).join(' ')
$(this).attr('class', newClassName)
这将删除第一个班级名称,因为您已与^=
匹配。
更新
请参阅此处,了解通过将函数传递给removeClass来移除类的示例:http://jsfiddle.net/DHxNG/1/。 JS是:
targ = 'table-col';
$('[class*="'+targ+'"]').removeClass(function(index, css) {
var re = new RegExp(targ+"-\\d+");
return (css.match(re) || []).join(' ');
});
这是基于此处的代码:JQuery removeClass wildcard
答案 1 :(得分:0)
您可以向startsWith
对象的原型添加string
函数,执行以下操作:
if (typeof String.prototype.startsWith != 'function') {
String.prototype.startsWith = function (str){
return this.indexOf(str) == 0;
};
}
然后你的循环删除以匹配的内容开头的类,如下所示:
for(r in replace) {
var targ = replace[r];
$("[class^='"+targ+"']").each(function() {
var $element = $(this);
var classes = $(this).attr('class').split(' ');
for(var i = 0; i < classes.length; i++) {
var cssClass = classes[i];
if(cssClass.startsWith(targ)) {
$element.removeClass(cssClass);
}
}
});
}