0

使用自动生成的 html 代码,使用变量类名:table-col-44, table-col-19, table-col-121等。

我有一个循环,正在使用这个 jQuery 选择器功能来选择这些变量类:

for(r in replace){
    var targ = replace[r];
    $("[class^='"+targ+"']").each(function(){
        ...
    })
}

问题是,一旦我选择了我想要清理的类,我就找不到一种方法来定位它们以删除它们。通常这些是需要保留其他类的标签,所以我不能完全擦除类属性<p><td>有没有办法将匹配的类作为参数传递给 each() 函数?或者$(this).removeClass([selected]),jQuery 附带了某种关键字?完全被这里难住了。谢谢您的帮助!

4

2 回答 2

2

不确定是否有更多的 jQuery 方式来执行此操作,但您可以在 each 中尝试:

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

于 2013-03-25T17:10:12.810 回答
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);
            }
        }
    });
}
于 2013-03-25T17:09:24.310 回答