Удалить класс CSS из элемента с JavaScript (без jQuery)

Может ли кто-нибудь дать мне знать, как удалить класс в элементе только с использованием JavaScript? Пожалуйста, не давайте мне ответа на jQuery, поскольку я не могу его использовать, и я ничего не знаю об этом.

Ответ 1

Правильный и стандартный способ сделать это - использовать classList. Теперь он широко поддерживается в последней версии большинства современных браузеров:

ELEMENT.classList.remove("CLASS_NAME");

remove.onclick = () => {
  document.querySelector('#el').classList.remove("red");
}
.red {
  background: red
}
<div id='el' class="red"> Test</div>
<button id='remove'>Remove Class</button>

Ответ 2

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

где MyID - это идентификатор элемента, а MyClass - это имя класса, который вы хотите удалить.


UPDATE: Чтобы поддерживать имена классов, содержащие символ тире, например "Мой класс", используйте

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

Ответ 3

Здесь вы можете исправить эту функцию прямо во всех элементах 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;
}

Ответ 4

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,' ');
        }
    }

Ответ 6

Изменить

Хорошо, перепишите. Это было немного, я немного научился, и комментарии помогли.

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");

Ответ 7

Это очень просто, я думаю.

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

Ответ 8

попробовать:

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

Ответ 9

var element = document.getElementById('example_id');
var remove_class = 'example_class';

element.className = element.className.replace(' ' + remove_class, '').replace(remove_class, '');

Ответ 10

Все эти ответы слишком сложны, попробуйте

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

Результатом будет возврат строки

Hello

Супер легкий. Кредиты идут в jondavidjohn Удалить часть строки в Javascript

Ответ 11

Я использую этот код фрагмента JS:

Прежде всего, я добираюсь до всех классов, тогда по индексу моего целевого класса я устанавливаю className = "".

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

Ответ 12

Существует также $.toggleClass, $.addClass и $.removeClass. Для документации взгляните на http://api.jquery.com/toggleClass/.

Посмотрите на этот пример jsFiddle, чтобы увидеть его в действии.

Ответ 13

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

С знаком плюса ('+') добавление класса в отличие от перезаписывания любых существующих классов