从JavaScript元素删除CSS类(没有jQuery)

任何人都可以让我知道如何仅使用JavaScript删除元素上的类? 请不要给我一个jQuery的答案,因为我不能使用它,我不知道这件事。

正确和标准的方法是使用classList 。 目前在最新版本的最新浏览器中得到广泛的支持 :

 ELEMENT.classList.remove("CLASS_NAME"); 

文档: https : //developer.mozilla.org/en/DOM/element.classList

 document.getElementById("MyID").className = document.getElementById("MyID").className.replace(/\bMyClass\b/,''); 

其中MyID是元素的ID,MyClass是您希望删除的类的名称。


更新:为了支持包含破折号字符的类名称,比如“My-Class”,请使用

 document.getElementById("MyID").className = document.getElementById("MyID").className .replace(new RegExp('(?:^|\\s)'+ 'My-Class' + '(?:\\s|$)'), ' '); 

这里有一个方法可以将这个功能直接烧入到所有的DOM元素中:

 HTMLElement.prototype.removeClass = function(remove) { var newClassName = ""; var i; var classes = this.className.split(" "); for(i = 0; i < classes.length; i++) { if(classes[i] !== remove) { newClassName += classes[i] + " "; } } this.className = newClassName; } 
 function hasClass(ele,cls) { return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); } function removeClass(ele,cls) { if (hasClass(ele,cls)) { var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); ele.className=ele.className.replace(reg,' '); } } 
 div.classList.add("foo"); div.classList.remove("foo"); 

更多信息请访问https://developer.mozilla.org/en-US/docs/Web/API/element.classList

编辑

好的,完全重写。 这已经有一段时间了,我已经学到了一些东西,评论帮了我一些忙。

 Node.prototype.hasClass = function (className) { if (this.classList) { return this.classList.contains(className); } else { return (-1 < this.className.indexOf(className)); } }; Node.prototype.addClass = function (className) { if (this.classList) { this.classList.add(className); } else if (!this.hasClass(className)) { var classes = this.className.split(" "); classes.push(className); this.className = classes.join(" "); } return this; }; Node.prototype.removeClass = function (className) { if (this.classList) { this.classList.remove(className); } else { var classes = this.className.split(" "); classes.splice(classes.indexOf(className), 1); this.className = classes.join(" "); } return this; }; 

旧邮政


我只是在做这样的事情 这是我提出的解决方案

 // Some browsers don't have a native trim() function if(!String.prototype.trim) { Object.defineProperty(String.prototype,'trim', { value: function() { return this.replace(/^\s+|\s+$/g,''); }, writable:false, enumerable:false, configurable:false }); } // addClass() // first checks if the class name already exists, if not, it adds the class. Object.defineProperty(Node.prototype,'addClass', { value: function(c) { if(this.className.indexOf(c)<0) { this.className=this.className+=' '+c; } return this; }, writable:false, enumerable:false, configurable:false }); // removeClass() // removes the class and cleans up the className value by changing double // spacing to single spacing and trimming any leading or trailing spaces Object.defineProperty(Node.prototype,'removeClass', { value: function(c) { this.className=this.className.replace(c,'').replace(' ',' ').trim(); return this; }, writable:false, enumerable:false, configurable:false }); 

现在你可以调用myElement.removeClass('myClass')

或链接它: myElement.removeClass("oldClass").addClass("newClass");

我想,这很简单。

 document.getElementById("whatever").classList.remove("className"); 

尝试:

 function removeClassName(elem, name){ var remClass = elem.className; var re = new RegExp('(^| )' + name + '( |$)'); remClass = remClass.replace(re, '$1'); remClass = remClass.replace(/ $/, ''); elem.className = remClass; } 
 var element = document.getElementById('example_id'); var remove_class = 'example_class'; element.className = element.className.replace(' ' + remove_class, '').replace(remove_class, ''); 

所有这些答案太复杂了,试试吧

 var string = "Hello, whats on your mind?"; var new_string = string.replace(', whats on your mind?', ''); 

结果将是字符串的返回

 Hello 

超级简单。 积分去jondavidjohn 在Javascript中删除字符串的一部分

我使用这个JS代码片段:

首先,我根据我的目标类的索引达到所有的类,我设置className =“”

 Target = document.getElementsByClassName("yourClass")[1]; Target.className=""; 

还有$.toggleClass$.addClass$.removeClass 。 有关文档,请查看http://api.jquery.com/toggleClass/

看看这个jsFiddle的例子来看看它的行动。

 document.getElementById("whatever").className += "classToKeep"; 

用加号('+')追加类,而不是覆盖任何现有的类