如何删除除某些类之外的元素中的所有类。我假设我们不能不使用removeClass()
。假设我有一个<div class="aa bb cc dd ee ff"></div>
,我想删除除aa dd
之外的所有类。我怎样才能做到这一点。
答案 0 :(得分:17)
为什么不直接用你想要的类替换class属性
$('#yourElement').attr('class',"aa dd");
答案 1 :(得分:9)
为了使它更清洁,你可以创建一个小扩展。
jQuery.fn.removeClassExcept = function (val) {
return this.each(function () {
$(this).removeClass().addClass(val);
});
};
然后你可以像
一样使用它$("selector").removeClassExcept("aa dd");
以下是一个例子:http://jsfiddle.net/9xhND/
更新
使用Brad Christie的逻辑,更新现在只保留原来的类而不添加新类。 http://jsfiddle.net/9xhND/1/
jQuery.fn.removeClassExcept = function (val) {
return this.each(function (index, el) {
var keep = val.split(" "), // list we'd like to keep
reAdd = [], // ones that should be re-added if found
$el = $(el); // element we're working on
// look for which we re-add (based on them already existing)
for (var c = 0; c < keep.length; c++){
if ($el.hasClass(keep[c])) reAdd.push(keep[c]);
}
// drop all, and only add those confirmed as existing
$el
.removeClass() // remove existing classes
.addClass(reAdd.join(' ')); // re-add the confirmed ones
});
};
答案 2 :(得分:7)
.removeClass()
接受一个函数,该函数将返回实际删除的类..
所以
$('div').removeClass(function(i, class){
// variable class hold the current value of the class attribute
var list = class.split(' '); // we create an array with the classes
return list.filter(function(val){ // here we remove the classes we want to keep
return (val != 'aa' && val != 'dd');
}).join(' '); // and return that list as a string which indicates the classes to be removed..
});
答案 3 :(得分:4)
您可以删除所有内容并添加所需内容:
$('#divID').removeClass()
.addClass('aa dd'); // add multiple classes by separating with space
注意:在未指定特定类名的情况下调用removeClass()
会删除所有类。
答案 4 :(得分:4)
jQuery实际上为removeClass方法提供了一个回调参数,因此您可以使用一个简单的javascript正则表达式来返回除了您不想删除的类之外的所有类:
$('#myDiv').removeClass(function() {
return $(this).attr('class').replace(/aa|bb/g, '');
});
这样就不会添加类'aa'和'bb'(如果它们尚不存在)。
您可以在此处看到它:http://jsfiddle.net/sr86u/3/
答案 5 :(得分:2)
你可以做的一种方法就是用你想要保留的类来覆盖所有类。所以,如果你的div的id为“myDiv”,那么你可以这样做:
$('#myDiv').attr('class', 'aa dd');
答案 6 :(得分:2)
如果您知道要保留哪些课程,您可以重新添加它们(正如其他人已经展示过的那样)。
我会假设不知道这些类是否已经应用,所以我会更进一步:
var keep = ['aa','bb'], // list we'd like to keep
reAdd = [], // ones that should be re-added if found
$el = = $(el); // element we're working on
// look for which we re-add (based on them already existing)
for (var c = 0; c < keep.length; c++){
if ($el.hasClass(keep[c])) reAdd.push(keep[c]);
}
// drop all, and only add those confirmed as existing
$el
.removeClass() // remove existing classes
.addClass(reAdd.join(' ')); // re-add the confirmed ones