JQuery - 使用“属性启动时”选择器时删除选定的类?

时间:2013-03-25 16:42:51

标签: jquery regex jquery-selectors

使用自动生成的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])关键字?完全被这里难住了。谢谢你的帮助!

2 个答案:

答案 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);
            }
        }
    });
}
相关问题