Поиск по сайту:

Как изменить классы CSS в JavaScript


Введение

В этом руководстве вы узнаете, как изменять классы CSS с помощью объекта JavaScript classList для вашего проекта манипулирования DOM. Объект classList позволяет настраивать классы CSS, назначенные элементу HTML.

Предпосылки

  • Общие знания JavaScript. Чтобы узнать больше о JavaScript, ознакомьтесь с серией статей How To Code in JavaScript.
  • Общие знания CSS. Чтобы познакомиться с CSS, ознакомьтесь с учебным пособием «Как применить стили CSS к HTML с помощью каскада и специфичности».

Запуск вашего проекта

Создайте файл index.html и включите тег style с классами CSS и элемент абзаца с id:

[label index.html] 
<style>
  .colorText {
    color: purple;
  }

  .boldText {
    font-weight: bold;
  }

  .bigText {
    font-size: 35px;
  }
</style>

<p id="myText">
  Hello World! 
</p>

Давайте теперь изменим ваш текст с помощью свойства classList и применим ваши классы CSS.

Использование методов classList .add() и .contains()

Создайте файл index.js, возьмите ссылку на элемент абзаца и вызовите метод classList.add():

[label index.js] 
const myText = document.getElementById('myText');

myText.classList.add('colorText');

Встроенный метод classList.add() применяет класс к вашему элементу HTML. В этом случае ваш текст в элементе абзаца теперь будет фиолетовым.

Вы также можете проверить, существует ли класс CSS в вашем элементе абзаца, используя метод classList.contains() для возврата логического значения:

[label index.js] 
const myText = document.getElementById('myText');

console.log(myText.classList.contains('colorText')); // true

Поскольку класс CSS colorText существует в вашем элементе абзаца, ваш вызов возвращает true.

Применение методов classList .item() и .remove()

В файле index.js добавьте дополнительные классы CSS к элементу абзаца:

const myText = document.getElementById('myText');

myText.classList.add('boldText');
myText.classList.add('bigText');
console.log(myText.classList); // ['colorText', 'boldText', 'bigText'];

Свойство classList хранит каждый дополнительный класс в массиве. Если вы выведете myText.classList, будет выведен массив с вашими классами CSS.

Чтобы проверить указанный индекс каждого класса CSS в массиве, вызовите метод classList.item():

const myText = document.getElementById('myText');

myText.classList.item('boldText'); // 2

Чтобы удалить класс CSS, используйте метод classList.remove():

[label index.js] 
const myText = document.getElementById('myText');

myText.classList.remove('bigText');
console.log(myText.classList); // ['colorText', 'boldText'];

После того как вы выведете myText.classList, удаленный вами класс CSS не появится в массиве и не будет применяться к вашему элементу абзаца.

Теперь, когда вы можете добавлять, проверять и удалять классы CSS, давайте рассмотрим, как усилить другие методы classList.

Обработка метода classList .toggle()

Вместо одновременного вызова classList.add() и classList.remove() вы можете использовать метод classList.toggle():

Для этого реализуйте прослушиватель событий на кнопке в файле index.js:

[label index.js] 
textButton.addEventListener('click', () => {
  myText.classList.toggle('newFont');
});

С каждым щелчком classList.toggle() будет добавлять класс CSS, если он не существует в массиве classList, и возвращать true. Если класс CSS существует, метод удалит класс и вернет false.

[label index.js] 
const anotherClass = myText.classList.toggle('newSize');

console.log(anotherClass); // true --> class was added

Вы также можете добавить логическое значение в качестве необязательного второго аргумента в методе classList.toggle(). Это либо добавит, либо удалит класс CSS, в зависимости от того, как оценивается второй аргумент:

const bool = false; 

let firstToggle = myText.classList.toggle('newSize', bool);
console.log(firstToggle);
// false, 'newFont' already exists and will remove from classList array

let secondToggle = shadesEl.classList.toggle('newColor', !bool);
console.log(secondToggle);
// true, 'newColor' does not exist and will add the class

Метод classList.toggle() поддерживает добавление и удаление классов CSS независимо от того, существуют они или нет в вашем массиве, с помощью более коротких строк кода.

Заключение

Свойство classList обеспечивает большую производительность и функциональность для изменения ваших элементов HTML и их классов CSS в JavaScript.

Для дополнительного чтения ознакомьтесь со статьей Understanding the DOM — Document Object Model.