0

我想在 jQuery 中删除一个多类,我有一个像这样的 id 元素

<div id="progress">content here</div>

有时它看起来像这样

<div id="progress" class="progress progress-danger">content here</div>

或者它看起来像这样

<div id="progress" class="progress progress-warning">content here</div>

我的问题是如果我想从中删除所有类progress-*

我需要删除它 X 行类型我得到了我的进步课程。

像这样

$('#progress').removeClass('progress-danger');
$('#progress').removeClass('progress-warning');

有人可以帮助我吗,

4

4 回答 4

3

.attr()可以将函数作为第二个参数,因此使用它可以解析使用 RegExp、f.ex 找到的每个元素的类名:

$('#progress').attr('class', function() {
    return this.className.replace(/progress-[a-z]+/g,'');
});​

http://jsfiddle.net/nVLzF/1/

于 2012-09-12T08:26:03.460 回答
2

您可以将多个类名传递给 removeClass 函数:

$('#languageProgress').removeClass('progress-danger progress-warning');

http://jsfiddle.net/nygSe/1/

于 2012-09-12T08:01:45.980 回答
1

您可以获得所有类名的数组并循环它们:

var $progress = $('#progress');
var classList = $progress[0].className.split(/\s+/);
$.each(classList, function(index, item){
    if (item.indexof('progress-') == 0) {
       $progress.removeClass(item);
    }
});

如果您不只是想检查单个元素,则可以使用@Alessandro Minoccheri 答案中的选择器并循环.each()

var $progress = $("div[class^='progress-'],div[class*='progress-']");
$progress.removeClass(function(index, classList){
    var item = this;
    var removeClasses = [];
    $.each(classList.split(/\s+/), function(index, className){
        if (className.indexOf('progress-') === 0) {
            removeClasses.push(className);
        }
    });
    return removeClasses.join(' ');
});​
于 2012-09-12T08:06:28.397 回答
-1
$("div[class^='progress'],div[class*='progress']").removeClass();

这将删除类以“progress”开头的类元素和包含由“progress”声明的类的元素。

于 2012-09-12T08:04:52.983 回答