使用纯JavaScript向元素添加类的另一种方法
添加类:
document.getElementById("div1").classList.add("classToBeAdded");
移除类的方法:
document.getElementById("div1").classList.remove("classToBeRemoved");
注意:但不支持IE <= 9或Safari <=5.0
下面的3个函数可在不支持 classList
的浏览器中使用:
function hasClass(el, className)
{
if (el.classList)
return el.classList.contains(className);
return !!el.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)'));
}
function addClass(el, className)
{
if (el.classList)
el.classList.add(className)
else if (!hasClass(el, className))
el.className += " " + className;
}
function removeClass(el, className)
{
if (el.classList)
el.classList.remove(className)
else if (hasClass(el, className))
{
var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
el.className = el.className.replace(reg, ' ');
}
}
https://jaketrent.com/post/addremove-classes-raw-javascript/
为了未来的友好性,我支持使用classList及其polyfill/shim包的建议:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/classList#wrapper
var elem = document.getElementById( 'some-id' );
elem.classList.add('some-class'); // Add class
elem.classList.remove('some-other-class'); // Remove class
elem.classList.toggle('some-other-class'); // Add or remove class
if ( elem.classList.contains('some-third-class') ) { // Check for class
console.log('yep!');
}
classList 从IE10开始提供支持,如果可以请使用它。
element.classList.add("something");
element.classList.remove("some-class");
我很惊讶这里没有一个答案明确提到非常有用的 DOMTokenList.prototype.toggle
方法,它真的可以简化很多代码。
例如,你经常会看到这样的代码:
if (element.classList.contains(className) {
element.classList.remove(className)
} else {
element.classList.add(className)
}
element.classList.toggle(className)
在许多情况下也非常有用,如果您根据条件添加或删除类名,可以将该条件作为第二个参数传递。如果该参数为真值,则toggle
的行为类似于add
,如果它是假值,则其行为类似于调用remove
。
element.classList.toggle(className, condition) // add if condition truthy, otherwise remove
要在没有JQuery的情况下添加类,只需将yourClassName
附加到您的元素className
中。
document.documentElement.className += " yourClassName";
要删除类,可以使用replace()
函数。
document.documentElement.className.replace(/(?:^|\s)yourClassName(?!\S)/,'');
正如@DavidThomas所提到的,如果您想将类名动态传递给替换函数,则需要使用new RegExp()
构造函数。
new RegExp()
构造函数。 - David Thomas\b
不足以匹配边界字符,因为类名中的某些字符是有效的。/\bfoo\b/
会替换类名 "foo-bar"
的第一部分。 - user1106925添加和删除类(在IE8+上测试过)
将trim() 添加到IE中(来自:JavaScript中的.trim()在IE中不起作用)
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
添加和删除类:
function addClass(element,className) {
var currentClassName = element.getAttribute("class");
if (typeof currentClassName!== "undefined" && currentClassName) {
element.setAttribute("class",currentClassName + " "+ className);
}
else {
element.setAttribute("class",className);
}
}
function removeClass(element,className) {
var currentClassName = element.getAttribute("class");
if (typeof currentClassName!== "undefined" && currentClassName) {
var class2RemoveIndex = currentClassName.indexOf(className);
if (class2RemoveIndex != -1) {
var class2Remove = currentClassName.substr(class2RemoveIndex, className.length);
var updatedClassName = currentClassName.replace(class2Remove,"").trim();
element.setAttribute("class",updatedClassName);
}
}
else {
element.removeAttribute("class");
}
}
使用方法:
var targetElement = document.getElementById("myElement");
addClass(targetElement,"someClass");
removeClass(targetElement,"someClass");
试试这个:
const element = document.querySelector('#elementId');
if (element.classList.contains("classToBeRemoved")) {
element.classList.remove("classToBeRemoved");
}
您也可以进行以下操作
elem.classList[test ? 'add' : 'remove']('class-to-add-or-remove');
取代
if (test) {
elem.classList.add('class-to-add-or-remove');
} else {
elem.classList.remove('class-to-add-or-remove');
}
CSS 代码
.demo {
background: tomato;
color: white;
}
Javascript 代码
function myFunction() {
/* Assign element to x variable by id */
var x = document.getElementById('para);
if (x.hasAttribute('class') {
x.removeAttribute('class');
} else {
x.setAttribute('class', 'demo');
}
}