如何在没有 jQuery 的情况下在 Javascript 中添加和删除类

IT技术 javascript html
2021-03-03 07:32:40

我正在寻找一种快速且安全的方法来在没有 jQuery 的情况下从 html 元素中添加和删除类。
它也应该在早期的 IE(IE8 及更高版本)中工作。

6个回答

使用纯 JavaScript 将类添加到元素的另一种方法

添加类:

document.getElementById("div1").classList.add("classToBeAdded");

对于删除类:

document.getElementById("div1").classList.remove("classToBeRemoved");

注意:但不支持 IE <= 9 或 Safari <=5.0

@任何在一个语句中添加和删除另一个的方法?
2021-04-16 07:32:40
2021-05-02 07:32:40

以下 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/

我总是想知道为什么人们为现代浏览器添加功能?我的意思是,如果您想支持旧浏览器,该代码不是多余的吗?
2021-04-23 07:32:40
@Abhi 不,不是。他的解决方案是为IE10 onwards和问题陈述IE8 and up
2021-04-28 07:32:40
jongo45 的答案是最好的。回答
2021-05-13 07:32:40

为了将来的友好性,我推荐使用 polyfill/shim 的 classList:https : //developer.mozilla.org/en-US/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