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

Pet*_*rle 50 html javascript

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

Sho*_*ate 104

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

添加课程:

document.getElementById("div1").classList.add("classToBeAdded");
Run Code Online (Sandbox Code Playgroud)

删除课程:

document.getElementById("div1").classList.remove("classToBeRemoved");
Run Code Online (Sandbox Code Playgroud)

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

  • 注意:"[*(我)猜(在)IE 8及以上.*](http://stackoverflow.com/questions/26736587/how-to-add-and-remove-classes-in-js-without- jQuery的#comment42059466_26736587)" (2认同)

Chr*_*ndi 26

为了将来友好,我推荐使用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!');
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ray 24

以下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, ' ');
    }
}
Run Code Online (Sandbox Code Playgroud)

https://jaketrent.com/post/addremove-classes-raw-javascript/


con*_*exo 16

让我感到困惑的是,这里的答案都没有突出地提到这个非常有用的DOMTokenList.prototype.toggle方法,它确实简化了很多代码。

例如,您经常看到执行此操作的代码:

if (element.classList.contains(className) {
  element.classList.remove(className)
} else {
  element.classList.add(className)
}
Run Code Online (Sandbox Code Playgroud)

这可以用简单的调用来替换

element.classList.toggle(className)
Run Code Online (Sandbox Code Playgroud)

在许多情况下也非常有用,如果您根据条件添加或删除类名,则可以将该条件作为第二个参数传递。如果该参数为真,则toggle表现为add,如果为假,则表现为 ,就好像您调用了remove

element.classList.toggle(className, condition) // add if condition truthy, otherwise remove
Run Code Online (Sandbox Code Playgroud)


zav*_*avg 5

要在没有 JQuery 的情况下添加类,只需附加yourClassName到您的元素className

document.documentElement.className += " yourClassName";

要删除类,您可以使用replace()函数

document.documentElement.className.replace(/(?:^|\s)yourClassName(?!\S)/,'');

同样正如@DavidThomas 提到的,new RegExp()如果您想将类名动态传递给替换函数,则需要使用构造函数。


jon*_*o45 5

从IE10起可以使用classList,如果可以的话,请使用该类

element.classList.add("something");
element.classList.remove("some-class");
Run Code Online (Sandbox Code Playgroud)