Javascript 删除除一个类以外的所有类
我知道,通过一些jQuery操作,我们可以向特定的div添加很多类:Javascript 删除除一个类以外的所有类,javascript,jquery,class,addclass,removeclass,Javascript,Jquery,Class,Addclass,Removeclass,我知道,通过一些jQuery操作,我们可以向特定的div添加很多类: <div class="cleanstate"></div> 当removeClass()杀死所有的类时,div会出错,但是在addClass('cleanstate')之后添加它会恢复正常。另一种解决方案是将ID属性与基本CSS属性放在一起,这样它们就不会被删除,这也提高了性能,但我只想知道另一种解决方案,可以去除除“.cleanstate”之外的所有属性 我这样问是因为,在实际脚本中,div会经历
<div class="cleanstate"></div>
当removeClass()
杀死所有的类时,div会出错,但是在addClass('cleanstate')之后添加它会恢复正常。另一种解决方案是将ID属性与基本CSS属性放在一起,这样它们就不会被删除,这也提高了性能,但我只想知道另一种解决方案,可以去除除“.cleanstate”之外的所有属性
我这样问是因为,在实际脚本中,div会经历各种类的更改。不需要分两步执行,只需使用attr
立即重置整个值,方法是使用所需的类覆盖所有类值:
jQuery('#container div.cleanstate').attr('class', 'cleanstate');
$('#container div.cleanstate').attr('class','cleanstate');
示例:用于直接将class属性设置为所需的特定值:
jQuery('#container div.cleanstate').attr('class', 'cleanstate');
$('#container div.cleanstate').attr('class','cleanstate');
有时,由于CSS动画,您需要保留一些类,因为一旦删除所有类,动画可能无法工作。相反,您可以保留一些类并删除其他类,如下所示:
$('#container div.cleanstate').removeClass('removethis removethat').addClass('cleanstate');
使用普通的旧JavaScript,而不是JQuery:
document.getElementById("container").className = "cleanstate";
关于robs答案,为了完整性,您也可以将querySelector与vanilla一起使用
document.querySelector('#container div.cleanstate').className = "cleanstate";
如果您想要保留一个或多个类,并且想要除这些类之外的类,该怎么办。如果您不想删除所有类,那么这些解决方案将无法再次添加特定类。
使用attr和removeClass()重置第一个实例中的所有类,然后再次附加相应的类。如果在重新设置的类上使用某些动画,则会失败
如果您只想删除除某个类之外的所有类,那么这是为您准备的。
我的解决方案是:RemoveAllExceptThis
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
$.fn.removeClassesExceptThese = function(classList) {
/* pass mutliple class name in array like ["first", "second"] */
var $elem = $(this);
if($elem.length > 0) {
var existingClassList = $elem.attr("class").split(' ');
var classListToRemove = existingClassList.diff(classList);
$elem
.removeClass(classListToRemove.join(" "))
.addClass(classList.join(" "));
}
return $elem;
};
Array.prototype.diff=函数(a){
返回this.filter(函数(i){返回a.indexOf(i)<0;});
};
$.fn.removeclassexceptthese=函数(类列表){
/*在数组中传递多个类名,如[“first”,“second”]*/
变量$elem=$(本);
如果($elem.length>0){
var existingClassList=$elem.attr(“类”).split(“”);
var classListToRemove=existingClassList.diff(classList);
$elem
.removeClass(classListToRemove.join(“”)
.addClass(classList.join(“”);
}
返回$elem;
};
这不会重置所有类,只会删除必要的类。
我需要它在我的项目中,我只需要删除不匹配的类
您可以使用它$(“.third”)。除去这些([“first”,“second”])
获取类,用“
(空格)拆分它们,并为每个类决定是否删除它?我喜欢删除一些类的答案。我认为代码可以是$('#container div.cleanstate').removeClass('removethis removethat').addClass('cleanstate')代码>。我试图编辑,但stackoverflow再次不让你有帮助。