Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除除一个类以外的所有类_Javascript_Jquery_Class_Addclass_Removeclass - Fatal编程技术网

Javascript 删除除一个类以外的所有类

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会经历

我知道,通过一些jQuery操作,我们可以向特定的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再次不让你有帮助。