Есть два способа, которыми это может быть достигнуто с помощью ванильного JavaScript. Первый - className
, а второй - classList
. className
работает во всех браузерах, но может быть неудобно работать при изменении атрибута класса элемента. classList
- это более простой способ изменить класс (ы) элемента.
Чтобы напрямую установить атрибут класса элемента, className
- это путь, иначе для изменения класса (классов) элемента проще использовать classList
.
Начальный HTML
<div id="ID"></div>
Настройка атрибут класса
var div = document.getElementById('ID');
div.className = "foo bar car";
Результат:
<div id="ID" class="foo bar car"></div>
Добавление класса
div.classList.add("car");// Class already exists, nothing happens
div.classList.add("tar");
Примечание: Нет необходимости проверять, существует ли класс перед его добавлением. Если нужно добавить класс, просто добавьте его. Если он уже существует, дубликат не будет добавлен.
Результат:
<div id="ID" class="foo bar car tar"></div>
Снятие класса
div.classList.remove("car");
div.classList.remove("tar");
div.classList.remove("car");// No class of this name exists, nothing happens
Примечание: Также как add
, если класс нужно удалить, удалите его. Если оно там, оно будет удалено, иначе ничего не произойдет.
Результат:
<div id="ID" class="foo bar"></div>
Проверка, содержит ли атрибут класса определенный класс
if (div.classList.contains("foo")) {
// Do stuff
}
Переключение класс
var classWasAdded = div.classList.toggle("bar"); // "bar" gets removed
// classWasAdded is false since "bar" was removed
classWasAdded = div.classList.toggle("bar"); // "bar" gets added
// classWasAdded is true since "bar" was added
.toggle
имеет второй логический параметр, который, на мой взгляд, является избыточным и не стоит переходить.
Для получения дополнительной информации о classList
, проверьте MDN . Он также охватывает совместимость браузера , если это проблема, которую можно решить, используя Modernizr для обнаружения и полифилл при необходимости.