从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";
用加号('+')追加类,而不是覆盖任何现有的类