В этой статье мы рассмотрим различные методы для работы с классами и стилями элемента. Познакомимся со свойствами classList и style, и примерами их использования для управления соответственно классами и стилями элементов на странице.
Управление классом (классами) элемента
Первый способ взаимодействия с классами элементов сводится к использованию DOM-свойства className
. Данное свойство является отражением атрибута class
в DOM. DOM-свойство className
не было названо class
из-за того, что раньше в JavaScript зарезервированные слова нельзя было использовать в качестве названия свойств объектов. Если вы не знаете, что такое DOM-свойства и чем они отличаются от атрибутов, то прочитать про это можете в этой статье.
Пример, в котором выполним различные операции над классом элемента используя DOM-свойство className
:
<p id="alert">...</p> <script> var elem = document.querySelector('#alert'); // добавим класс к элементу elem.className = 'alert'; // "alert" // изменим класс у элемента elem.className = 'alert-warning'; // "alert-warning" // получим значение класса и сохраним его в className var classElem = elem.className; // "alert-warning" // удалим класс у элемента elem.className = ""; // "" </script>
Второй способ выполнить операции, связанные с классом элемента – это использовать методы для управления атрибутами.
Пример, в котором выполним действия как вышеприведённом коде, но с использованием методов для управления атрибутами:
<p id="alert">...</p> <script> var elem = document.querySelector('#alert'); // добавим класс к элементу elem.setAttribute('class', 'alert'); // изменим класс у элемента elem.setAttribute('class', 'alert-warning'); // получим значение класса и сохраним его в className var classElem = elem.getAttribute('class'); // "alert-warning" // удалим класс у элемента elem.removeAttribute('class'); </script>
DOM-свойство className
и атрибут class
всегда синхронизуются между собой, это значит, что при изменении одного меняется и другое.
Но у элемента может быть не один класс, а несколько. В этом случае работать с ними как со строкой не очень удобно.
Например, определить наличие какого-то одного определённого класса у элемента, используя вышеприведённые способы уже нельзя осуществить так просто. Это потребует написание определённого кода.
Пример, в котором проверим наличие у элемента класса content__show
:
<div id="content" class="content content__show">...</div> <script> var elem = document.querySelector('#content'); if ((' ' + elem.className + ' ').indexOf(' content__show ') > -1) { // у элемента есть класс content__show } else { // у элемента класса content__show нет } </script>
Но кроме этой ситуации, встречаются и другие. Например, когда нужно добавить какой-то один определённый класс к элементу, или удалить его. Чтобы эти действия и другие производить очень просто у элемента есть специальное для этих случаев DOM-свойство classList
.
Свойство classList
Свойство classList
представляет собой специальный объект (DOMTokenList), который содержит методы для выполнения различных операций над классами элемента.
Методы classList
:
.add( className1[,className2,...] )
— добавляет один или несколько указанных классов к элементу. Если у элемента уже есть данный класс, то он к нему добавлен не будет..remove( className1[,className2,... ] )
— удаляет один или несколько указанных классов у элемента. Если у элемента нет класса, который вы хотите удалить, то никаких действий произведено не будет..contains( className )
– проверяет наличие класса у элемента; в качестве ответа возвращаетtrue
илиfalse
..toggle( className [,flag] )
— переключает указанное имя класса у элемента, т.е. если у элемента есть данный класс, то убирает его; в противном случае добавляет. Второй параметр (flag
) необязательный. По умолчанию он имеет значениеundefined
. Если ему установить значениеtrue
илиfalse
, то он будет работать как методadd
илиremove
, т.е. либо добавлять класс к элементу, либо удалять его у него.
Пример, в котором показано как можно выполнять различные действия, связанные с классами элемента с использованием методов classList
:
// получим элемент c id="sidebar" const sideBar = document.querySelector('#sidebar'); // переключим класс hidden-xs у элемента, т.е. если он есть он у элемента, то удалим его; а если данного класса нет, то добавим его к нему sideBar.classList.toogle('hidden-xs'); // добавим три дополнительных класса sideBar.classList.add('col-xs-6', 'col-sm-4', 'col-md-3'); // удалим класс hidden-xs sideBar.classList.remove('hidden-xs'); // проверим есть ли класс hidden-lg у элемента и если есть, то добавим к нему ещё один hidden-md if (sideBar.classList.contains('hidden-lg')) { sideBar.classList.add('hidden-md'); }
Объект classList
является псевдомассивом, т.е. его можно перебрать как массив.
Пример, в котором переберём все классы classList
:
<div class="content col-12 col-sm-8 col-md-6">...</div> <script> var content = document.querySelector('.content'); // Вариант №1. С помощью цикла for // classList.length - количество классов у элемента // отсчёт классов в classList ведётся с 0 for (var i = 0, length = content.classList.length; i < length; i++) { // i - индекс класса в classList // выведем класс в консоль console.log(content.classList[i]); // или так (с помощью метода item) console.log(content.classList.item(i)); } // если мы хотим получить класс по его индексу, а указали в качестве значения индекса число, которое больше, чем (количества элементов - 1) в classList (т.к. отсчет ведётся с 0), то в этом случае получим в качестве результата undefined console.log(content.classList[7]); // undefined // Вариант №2. С помощью цикла for..of for (let className of content.classList) { // выведем класс в консоль console.log(className); } </script>
Свойство classList
поддерживается всеми современными браузерами. Если нужна поддержка совсем старых браузеров (например, Internet Explorer 8, 9), то в этом случае можно воспользоваться каким-нибудь полифиллом.
Стили элемента
В DOM у каждого элемента есть свойство style
, с помощью которого мы можем управлять его стилями. Значение данного свойства — это объект, который доступен только для чтения. Установка стилей элементу в этом случае осуществляется посредством добавления к нему соответствующих свойств.
Пример, как можно к элементу добавить стили через DOM-свойство style
:
<div class="square">Квадрат</div> <script> const square = document.querySelector('.square'); square.style.width = '170px'; square.style.height = '170px'; square.style.backgroundColor = 'green'; </script>
Имена свойств объекта style
обычно совпадают с названиями CSS-свойств. Исключение составляют только те CSS-свойства, в которых используется дефис. Например, background-color
. В этом случае дефис и следующая за ним буква заменяется на прописную. Например, CSS-свойство background-color
для объекта style
будет указывать как backgroundColor
. А, например, CSS-свойство с браузерным префиксом -webkit-border-radius
— как WebkitBorderRadius
.
Удаление стилей
Например, установим body
некоторый цвет фона:
document.body.style.backgroundColor = '#eee';
Если теперь данный стиль нужно убрать, то чтобы это выполнить мы должны просто присвоить ему пустую строку:
document.body.style.backgroundColor = '';
Примеры использования DOM-свойства style для установки стилей элементам.
<p id="introtext" style="font-weigth: bold;">...</p> <p>...</p> <p>...</p> <script> // установим элементу с id = "introtext" с использованием style красный цвет текста document.querySelector('#introtext').style.color = 'red'; // установим всем элементам p на странице с использованием style зелёный цвет текста var paragraphs = document.querySelectorAll("p"); for (var i = 0, length = paragraphs.length; i < length; i++) { paragraphs[i].style.backgroundColor = 'green'; } // выведем в консоль все CSS свойства элемента с идентификатором "introtext" var styleElem = document.querySelector('#introtext').style; for (var i = 0, length = styleElem.length; i < length; i++) { console.log(styleElem[i]); } </script>
Свойство cssText
Кроме индивидуального установления стилей элементу мы можем установить их сразу с помощью специального свойства style.cssText
. Осуществляется это посредством присваивания этому свойству строки, состоящей из набора стилей, разделённых между собой с помощью точки с запятой. Т.е. выполняется это аналогично тому, как мы устанавливаем стили в HTML-атрибуте style
.
Пример, в котором установим стили "font-size:40px; color:blue;"
элементам с классом intro
:
<p class="intro">...</p> <script> //получим все элементы с классом intro const introList = document.querySelectorAll('.intro'); //установим "font-size:40px; color:blue;" всем элементам в introList for (let i = 0, length = introList.length; i < length; i++) { introList[i].style.cssText = 'font-size:40px; color:blue;'; } </script>
При установке стилей с помощью свойства style.cssText
нужно быть осторожным. Эти связано с тем, что при установке это свойство удаляет все стили, которые есть у элемента. Т.е. те, которые мы установили ему с помощью атрибута style
и в соответствующем ему DOM-свойстве.
Выполнить операцию, аналогичную той которую выполняет свойство style.cssText
, можно ещё через метод setAttribute
.
Например:
<p class="info">...</p> <script> //получим первый элемент с классом info const info = document.querySelector('.info'); //установим ему стиль "margin: 10px; padding: 10px; border: 1px solid green;" info.setAttribute('style', 'margin: 10px; padding: 10px; border: 1px solid green;'); </script>
Задания
1. Написать скрипт, используя classList
, для установления элементу с классом text
трех классов: size-40
, color-red
и bg-yellow
:
<!-- СSS --> <style> .size-40 { font-size: 40px; } .color-red { color: red; } .bg-yellow { background: yellow; } </style> <!-- HTML --> <p class="text">Некоторый текст...</p>
2. Написать код для установления стиля "width: 180px; height: 180px;"
всем элементам на странице с классом, начинающимся со слов block-
.
На чтение 10 мин. Опубликовано 22.02.2021
Javascript не только предназначен для создания функциональности на странице. Благодаря наличию Documnt Object Model (DOM) и Browser Object Model (BOM), язык может взаимодействовать с разметкой, стилями и браузером. DOM является древовидной структурой, основой которой является объект Window.
Элементы HTML разметки представляются в DOM как набор объектов в определенной иерархии. Каждый HTML элемент представлен в виде объекта со своими свойствами и методами. Поэтому, посредством JS, можно обращаться к элементам разметки и манипулировать с их свойствами.
Свойства HTML элементов выражены в CSS стилях. Однако JS не может изменять стили, заключенные в теге <style>, а также во внешних файлах CSS. Когда посредством JS изменяется или добавляется новое свойство CSS для элемента, то интерпретатор формирует его как атрибут «style». Это можно наглядно увидеть в инструментах разработчика Chrome или в Firebug браузера Firefox.
Иерархия DOM
Объекты в иерархии DOM распределены в следующей последовательности:
- Window;
- Document;
- Element;
Теперь подробнее о каждом из них:
- Window. Это главный объект всего браузера. Он содержит свойства-объекты управления окном и элементами разметки. Одним из его свойств-объектов управления экраном браузера является Document, который содержит в себе свойство-объект Element.
- Document. Управляет всеми элементами разметки он содержит в себе необходимый набор свойств для обращения к элементам HTML, а также свойства для управления окном.
- Element. Содержит свойства и методы, которые позволяют манипулировать элементами и стилями.
Поиск нужного элемента
Прежде чем присвоить элементу какой-либо стиль, нужно сначала обратиться к объекту этого элемента, через объект Document. Выглядит это следующим образом: Document.Element(метод обращения к элементу).style.property = value
Подробнее об этой конструкции:
- Document — обращаемся к объекту страницы;
- Element — полученный HTML-элемент в ходе вызова одного из методов Document.
- style — объект, содержащий свойства CSS объекта Element.
- property — CSS свойство, а также свойство объекта style.
- value — значение CSS свойства, которое может быть как числовым, так и строковым.
Аналогичным способом мы можем прочитать значение любого CSS свойства. Однако это возможно только в том случае, если у элемента стоит атрибут style. Рассмотрим на примере обращение к элементу посредством метода «getElementById(name)»
Пример:
<p id = «paragraph» class = «parag1»>Параграф<p>
var p = document.getElementById(«paragraph»); // сохранили в переменную элемент с id = paragraph.
p.style.fontSize = «3em»; // изменим стиль параграфа, увеличив его шрифт до 3em
Если открыть инструменты разработчика в браузере, параграф будет с атрибутом style: <p id = «paragraph» class = «parag1» style = «font-size: 3em»>Параграф<p>
Методы поиска элемента
Есть несколько методов объекта document для поиска определенного элемента по классу, по айди или имени тега:
- getElementById(id) — поиск элемента по id, возвращается один элемент с соответствующим айди;
- getElementsByClassName(class) — возвращает список элементов под указанным классом, обращение к любому из них осуществляется по индексу [index];
- getElementsByTagName(tag) — метод аналогичен предыдущему, только поиск осуществляется по имени тега;
- getElementsByName(name) — возвращает список элементов с указанным именем в атрибуте;
- querySelector(selector) — возвращает первый элемент с указанным в параметре селектором из тега style или внешнего файла CSS;
- querySelectorAll(selector) — метод аналогичен предыдущему, но возвращает не один элемент, а их список;
- body — обращение к тегу body;
- forms — обращение к формам, сохраняется список имеющихся форм, к отдельной можно обратиться по индексу;
- images — возвращает все имеющиеся изображения на страницы в теге img, обращение к отдельному осуществляется по индексу.
Пример:
<p id = «paragraph» class = «parag1»>Параграф<p>
<form>
<input type = «text»>
<input type = «submit»>
</form>
<img src = «cat.jpg»>// Получаем объекты этих элементов
var p = document.getElementById(«paragraph»); // получаем параграф по айди
var f = document.forms; // получили список форм, состоящий из одной
var i = document.images; // получение всех изображений//Добавим полученным элементам стили
p.style.backgroundColor = «red»;
f.style.borderRadius = «20px»;
i.style.float = «left»;
i.style.margin = «50px»;
Отличия имен свойств в CSS и JavaScript
В CSS имена свойств пишутся через дефис, к примеру: font-size, background-image, border-width и другие. Сейчас рассматриваются именно те свойства, которые пишутся через дефис. В JavaScript свойства пишутся слитно, но с большой буквы: fontSize, backgroundImage, borderWidth. Данное правило не относится к свойствам CSS, состоящим из одного слова: width, position, margun и другие указываются в JavaScript с тем-же синтаксисом.
Как изменить свойства элемента через тег style или внешний файл
Представим, что у нас есть внешний CSS файл со свойствами для тегов определенного класса:
.paragraph{
font-size: 20px;
background-color: yellow;
border: 1px solid black;
}
Теперь в том-же файле определим стиль, для несуществующего элемента:
.chageParagraph{
font-size: 3em;
}
В HTML у нас есть элемент для которого были написаны эти стили:
<p class = «paragraph»>Параграф<p>
Чтобы определить параграфу стили из внешнего файла, нужно сменить имя его класса. Мы определили стили для несуществующего класса. Его мы и поставим нашему параграфу:
var p = document.getElementById(«paragraph»); // Сохранили объект параграфа в переменную
p.class = «changeParagraph»; // Замена имени класса параграфа
Теперь наш параграф получил новый класс «chageParagraph». Как видно для данного класса определены лишь стили по увеличению размера шрифта. Соответственно, фоновый цвет стал по умолчанию, и рамка исчезла. Вернуть обратно прежний стиль можно прежним образом, через установку старого имени класса. Такой подход часто применяют в событиях при добавлении интерактивности странице.
Свойства и методы которые позволяют изменять классы и id элементов
Рассмотрим несколько полезных свойств и методов, которые удобно применять для значения атрибутов class и id:
- id = value — сменяет значение id;
- className = value — возвращает или устанавливает новое имя атрибута class;
- class = value — аналогично предыдущему;
- setAttribute(name, value) — метод позволяет установить класс или айди элементу, а также сменить значение имеющегося;
Другие примеры установки различных стилей
Рассмотрим несколько примеров для установки стилей для различных элементов через JavaScript:
- object.style.animation = «name duration timingFunction delay iterationCount direction fillMode playState» создание анимации для объекта.
- object.style.background = «color image repeat attachment position size origin clip» — установка свойств для фона.
- object.style.border = «width style color» — установка стилей для границ элемента.
- object.style.columns = «auto|column-width column-count» — установка свойств для колонок.
- object.style.font = «font-style font-variant font-weight font-size/line-height — короткий способ установки нужных свойств для шрифта.
- object.style.opacity — добавление элементу прозрачности.
- object.style.outline = «width style color» — установка внешней границы для элемента.
Объект classList
ClassList хранит объект всех классов определенных элементов. Он обладает своими методами и свойствами для манипуляций с классами. Рассмотрим несколько примеров:
- document.getElementById(«myDIV»).classList — получение объекта classList, который является списком классов с айди myDiv.
- document.getElementById(«myDIV»).classList.add(«mystyle», «anotherClass», «thirdClass») — здесь определенному элементу было установлено три класса с именами, указанными в параметрах.
- document.getElementById(«myDIV»).classList.remove(«mystyle») — здесь элементу удалили класс с именем, указанным в параметре метода remove.
- document.getElementById(«myDIV»).classList.remove(«mystyle», «anotherClass», «thirdClass») — аналогично предыдущему примеру, однако здесь удаляется сразу несколько классов.
- document.getElementById(«myDIV»).classList.length — получение длины списка классов.
- document.getElementById(«myDIV»).classList.item(0) — получения первого элемента с классом из списка.
- document.getElementById(«myDIV»).classList.contains(«mystyle») — проверяем, есть ли такой класс.
- document.getElementById(«myDropdown»).classList.toggle(«show») — установка атрибута класса и его значения.
Другие примеры
Пример 1: Добавление надписи посредством нажатия на кнопку
<p id=»demo»>Click the button to change the text in this paragraph.</p>
<button onclick=»myFunction()»>Try it</button>
<script>
function myFunction() {
document.getElementById(«demo»).innerHTML = «Hello World»;
}
</script>
Пример 2: Смена цвета текста параграфа
<p id=»demo»>Click the button to change the color of this paragraph.</p>
<button onclick=»myFunction()»>Try it</button>
<script>
function myFunction() {
var x = document.getElementById(«demo»);
x.style.color = «red»;
}
</script>Пример 3: Смена фонового цвета среднего параграфа
<div class=»example»>
<p>P element in first div with class=»example». Div’s index is 0.</p>
</div><div class=»example color»>
<p>P element in first div with class=»example color». Div’s index is 0.</p>
</div><div class=»example color»>
<p>P element in second div with class=»example color». Div’s index is 1.</p>
</div><p>Click the button to change the background color of the first div element with the classes «example» and «color».</p>
<button onclick=»myFunction()»>Try it</button>
<script>
function myFunction() {
var x = document.getElementsByClassName(«example color»);
x[0].style.backgroundColor = «red»;
}
</script>
Пример 4: Смена фона для всех элементов списка
<p>This is a p element</p>
<p>This is also a p element.</p>
<p>This is also a p element — Click the button to change the background color of all p elements in this document.</p>
<button onclick=»myFunction()»>Try it</button>
<script>
function myFunction() {
var x = document.getElementsByTagName(«P»);
var i;
for (i = 0; i < x.length; i++) {
x[i].style.backgroundColor = «red»;
}
}
</script>
Пример 5: Получение всех параметров документа
<p>An unordered list:</p>
<ul>
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul><p>Click the button to display the innerHTML of the UL element (index 3).</p>
<button onclick=»myFunction()»>Try it</button>
<p id=»demo»></p>
<script>
function myFunction() {
var x = document.getElementsByTagName(«*»);
document.getElementById(«demo»).innerHTML = x[3].innerHTML;
}
</script>
Обратите внимание, здесь все элементы помещены в список через параметр «*». Обращение к любому из них также осуществляется через индекс.
Итого
Современный JavaScript не является удобным инструментом для манипуляций со стилями. доя этого есть ряд других инструментов, к примеру JQuery. Однако каждый разработчик должен знать как управлять стилями нативным языком.
В этом руководстве мы расскажем, как модифицировать DOM, изменяя стили, классы HTML-элементов с помощью JavaScript. Это даст лучшее понимание того, как управлять основными элементами в DOM.
- Обзор выбора элементов
- Изменение стилей
- Заключение
Библиотека jQuery упростила процесс выбора одного или нескольких элементов и применения изменений ко всем одновременно.
Напомним, что document.querySelector() и document.getElementById() — это методы, которые используются для доступа к одному элементу. Используя div с атрибутом id, мы можем получить доступ к этому элементу.
<div id="demo-id">Demo ID</div>
Метод querySelector() является более надежным. Он позволяет выбрать элемент на странице с помощью любого типа селектора.
// Оба метода возвращают единственный элемент const demoId = document.querySelector('#demo-id');
Получив доступ к элементу, можно изменить его отдельную часть. Например, текст, размещенный внутри него.
// Изменяем текст одного элемента demoId.textContent = 'Demo ID text updated.';
Но при доступе к нескольким элементам с помощью общего селектора, такого как определенный класс, нужно пройтись по всем ним. В приведенном ниже примере используются два элемента div с одинаковым значением атрибута class:
<div class="demo-class">Demo Class 1</div> <div class="demo-class">Demo Class 2</div>
Мы будем использовать метод querySelectorAll() для захвата всех элементов с классом demo-class. А также forEach() для их перебора и изменения.
Также к определенному элементу можно получить доступ с помощью querySelectorAll():
// Получаем NodeList всех элементов .demo const demoClasses = document.querySelectorAll('.demo-class'); // Изменяем текст нескольких элементов с помощью цикла demoClasses.forEach(element => { element.textContent = 'All demo classes updated.'; }); // Получаем доступ к первому элементу в NodeList demoClasses[0];
Свойства и методы, используемые в примерах, приведенных в этой статье, часто будут привязаны к прослушивателям событий. Благодаря им они смогут реагировать на клики, наведения курсора и другие действия пользователей.
Примечание: Методы getElementsByClassName() и getElementsByTagName() возвращают наборы элементов HTML, не имеющие доступа к методу forEach(). Он использует querySelectorAll(). В этих случаях необходимо применять стандартный цикл for для перебора набора.
Изменение атрибутов
Атрибуты — это значения, которые содержат дополнительную информацию об HTML-элементах. Чаще всего они состоят из пары имя / значение и могут применяться в зависимости от элемента. Полный список HTML- атрибутов смотрите в списке атрибутов .
К пользовательским элементам, которые не являются частью стандарта HTML, добавляется префикс data-.
В JavaScript доступно четыре метода изменения атрибутов элемента:
Метод | Описание | Пример |
hasAttribute() | Возвращает логическое значение true или false | element.hasAttribute(‘href’); |
getAttribute() | Возвращает значение указанного атрибута или null | element.getAttribute(‘href’); |
setAttribute() | Добавляет или обновляет значение указанного атрибута | element.setAttribute(‘href’, ‘index.html’); |
removeAttribute() | Удаляет атрибут из элемента | element.removeAttribute(‘href’); |
Создадим новый HTML-файл с тегом <img>, использующим один атрибут. В нем мы будем ссылаться на изображение, доступное через URL-адрес.
<!DOCTYPE html> <html lang="en"> <body> <img src="https://js-tutorials.nyc3.digitaloceanspaces.com/shark.png"> </body> </html>
При загрузке созданной веб-страницы в браузере ее HTML-код будет выглядеть следующим образом:
Теперь протестируем все методы для обработки атрибутов.
// Назначаем элемент изображения const img = document.querySelector('img'); img.hasAttribute('src'); // возвращает true img.getAttribute('src'); // возвращает "...shark.png" img.removeAttribute('src'); // удаляет атрибут src и значение
Удалим атрибут src и значение, связанные с тегом <img>. Но можно сбросить этот атрибут и назначить ему другое изображение с помощью img.setAttribute():
img.setAttribute('src', 'https://js-tutorials.nyc3.digitaloceanspaces.com/octopus.png');
Также можно изменить атрибут напрямую, присвоив ему новое значение в качестве свойства элемента:
img.src = 'https://js-tutorials.nyc3.digitaloceanspaces.com/shark.png';
Любой атрибут может быть отредактирован так же, как и с помощью описанных выше методов.
Методы hasAttribute() и getAttribute() используются с условными операторами. Методы setAttribute() и removeAttribute() также применяются для изменения структуры DOM.
Изменение классов
Атрибут class соответствует селектору класса CSS. CSS-классы используются для применения стилей к нескольким элементам. В отличие от идентификаторов, которые могут существовать на веб-странице только в единственном экземпляре.
В JavaScript есть свойства className и classList, предназначенные для работы с атрибутом class.
Метод / Свойство | Описание | Пример |
className | Получает или задает значение класса | element.className; |
classList.add() | Добавляет одно или несколько значений класса | element.classList.add(‘active’); |
classList.toggle() | Включает или отключает класс | element.classList.toggle(‘active’); |
classList.contains() | Проверяет, существует ли класс. | element.classList.contains(‘active’); |
classList.replace() | Заменяет существующее значение класса новым. | element.classList.replace(‘old’, ‘new’); |
classList.remove() | Удаляет значение класса. | element.classList.remove(‘active’); |
Создадим еще один HTML-файл для демонстрации перечисленных выше методов.
<!DOCTYPE html> <html lang="en"> <style> body { max-width: 600px; margin: 0 auto; font-family: sans-serif; } .active { border: 2px solid blue; } .warning { border: 2px solid red; } .hidden { display: none; } div { border: 2px dashed lightgray; padding: 15px; margin: 5px; } </style> <body> <div>Div 1</div> <div class="active">Div 2</div> </body> </html>
После открытия файла classes.html в браузере вы увидите следующее:
Свойство className было введено для предотвращения конфликтов с ключевым словом class, которое используется в JavaScript. Вы можете использовать className, чтобы присвоить значение непосредственно классу.
// Выбираем первый div const div = document.querySelector('div'); // Присваиваем первому div класс warning div.className = 'warning';
Мы присвоили первому элементу div класс warning, определенный в CSS. Вы получите следующий результат:
Обратите внимание, что если какие-либо классы уже используются в элементе, это переопределит их. Можно добавить несколько классов, разделенных пробелом, используя свойство className.
Другой способ изменить классы – использовать свойство classList, которое включает в себя несколько полезных методов. Они похожи на JQuery-методы addClass, removeClass и toggleClass.
// Выбираем второй div по имени класса const activeDiv = document.querySelector('.active'); activeDiv.classList.add('hidden'); // Добавляем класс hidden activeDiv.classList.remove('hidden'); // Удаляем класс hidden activeDiv.classList.toggle('hidden'); // Переключаем hidden true и false activeDiv.classList.replace('active', 'warning'); // Заменяем активный класс классом warning
После выполнения указанных выше методов веб-страница будет выглядеть следующим образом:
Использование classList.add() добавит новый класс в список существующих. Также можно использовать setAttribute для изменения класса элемента.
Создадим простой пример для демонстрации изменения стилей элементов с помощью JavaScript. Ниже приведен новый HTML-файл. Он включает в себя div с несколькими встроенными стилями, применяемыми для отображения квадрата.
<!DOCTYPE html> <html lang="en"> <body> <div style="height: 100px; width: 100px; border: 2px solid black;">Div</div> </body> </html>
При открытии файла styles.html в браузере вы увидите следующее:
Один из вариантов редактирования стилей – использование метода setAttribute().
// Выбираем div const div = document.querySelector('div'); // Применяем к div стили div.setAttribute('style', 'text-align: center');
Но подобный подход удалит все существующие для элемента встроенные стили. Поэтому лучше напрямую использовать атрибут style:
div.style.height = '100px'; div.style.width = '100px'; div.style.border = '2px solid black';
Обратите внимание, что в методах JavaScript используется другие правила написания свойств CSS. Например, вместо text-align мы будем использовать textAlign.
// Преобразуем div в круг и центрируем текст вертикально div.style.borderRadius = '50%'; div.style.display = 'flex'; div.style.justifyContent = 'center'; div.style.alignItems = 'center';
После этого окончательный результат будет выглядеть следующим образом:
Если к элементу необходимо применить много стилей, то лучше назначить стили для класса и добавить новый класс. Но в некоторых случаях необходимо будет изменить атрибут встроенного стиля.
В этом руководстве мы рассказали, как получить доступ, изменить и удалить атрибуты HTML-элементов в DOM с помощью JavaScript. А также как добавлять и заменять CSS-классы элемента, редактировать встроенные CSS- стили. Для получения дополнительной информации ознакомьтесь с документацией по атрибутам от Mozilla Developer Network.