Кратко
СкопированоЭлемент — это кусочек HTML в DOM-дереве. Браузер создаёт DOM для взаимодействия между JavaScript и HTML. Каждый HTML-тег при этом превращается в элемент DOM. Ещё такие элементы называют узлами.
Из DOM можно получить элемент и изменить его. Браузер заметит изменения и отобразит их на странице.
Как пишется
СкопированоНапример, можно поменять выравнивание у элемента h1
:
// получаем элемент из DOMconst element = document.getElementsByTagName('h1')[0]// после выполнения этого кода h1 будет выравнивать текст по центруelement.align = 'center'// меняем цвет шрифта на красныйelement.style.color = 'red'
// получаем элемент из DOM const element = document.getElementsByTagName('h1')[0] // после выполнения этого кода h1 будет выравнивать текст по центру element.align = 'center' // меняем цвет шрифта на красный element.style.color = 'red'
Как понять
СкопированоHTML-элементы содержат свойства, которые можно разделить на группы:
- свойства, связанные с HTML-атрибутами: id, классы, стили и так далее;
- свойства и методы связанные с обходом DOM: получение дочерних элементов, родителя, соседей;
- информация о содержимом;
- специфические свойства элемента.
Первые три группы свойств есть у всех элементов. Специфические свойства отличаются в зависимости от типа элемента. Например, у полей ввода есть свойства, которых нет у параграфов и блоков: value
, type
и другие.
💡 Свойства, связанные с HTML-атрибутами
СкопированоЧитать и записывать значения HTML-атрибутов можно при помощи свойств элемента. Название обычно совпадает с названием атрибута:
id
— получить идентификатор элемента.class
— список классов в HTML-атрибутеName class
.
const element = document.getElementsByTagName('div')[0]// напечатать список классов в консольconsole.log(element.className)// установить свой классelement.className = 'hacked'
const element = document.getElementsByTagName('div')[0] // напечатать список классов в консоль console.log(element.className) // установить свой класс element.className = 'hacked'
style
— добавить стили. Стили добавляются так же с помощью свойств. Свойства именуются по аналогии с CSS-свойствами:
const element = document.getElementsByTagName('div')[0]// CSS-свойство background-colorelement.style.backgroundColor = 'beige'// CSS-свойство colorelement.style.color = 'gray'// CSS-свойство margin-topelement.style.marginTop = '20px'
const element = document.getElementsByTagName('div')[0] // CSS-свойство background-color element.style.backgroundColor = 'beige' // CSS-свойство color element.style.color = 'gray' // CSS-свойство margin-top element.style.marginTop = '20px'
💡 Свойства и методы, связанные с DOM
Скопированоchildren
— список дочерних элементов;parent
— получить родительский элемент;Element next
иElement Sibling previous
— получить следующий/предыдущий узел-сосед:Element Sibling
get
— поиск среди дочерних элементов по названию класса;Elements By Class Name ( ) get
— поиск среди дочерних элементов по названию тега;Elements By Tag Name ( ) query
— поиск первого дочернего элемента, подходящего под CSS-селектор;Selector ( ) query
— поиск всех дочерних элементов подходящих под CSS-селектор;Selector All ( )
С помощью этих свойств и методов можно перемещаться по дереву и даже обойти все его элементы, если это нужно.
💡 Свойства с информацией о содержимом
Скопированоinner
— это свойство возвращает HTML-код всего, что вложено в текущий элемент. При записи в это свойство, предыдущее содержимое будет затёрто. Страница отобразит новое содержимое:H T M L
const divElement = document.getElementsByTagName('div')[0]divElement.innerHTML = '<p>Добавлен из кода</p>'// после выполнения этого кода, на странице отобразится параграф с указанным текстом
const divElement = document.getElementsByTagName('div')[0] divElement.innerHTML = '<p>Добавлен из кода</p>' // после выполнения этого кода, на странице отобразится параграф с указанным текстом
outer
— это свойство возвращает HTML-код текущего элемента и всего, что в него вложено. При записи в это свойство, предыдущее содержимое будет затёрто.H T M L text
— свойство, возвращает текст всех вложенных узлов без HTML-тегов.Content
Почувствуй разницу на демо:
На практике
Скопированосоветует Скопировано
🛠 Если нужно добавить текст в элемент, то всегда используйте свойство text
. Другие свойства обрабатывают HTML, это может привести к дырам в безопасности.
🛠 Для работы с классами элемента есть удобные методы, доступные через свойство class
:
- добавить класс — метод
add
.( ) - удалить класс — метод
remove
.( )
const element = document.getElementsByTagName('div')[0]element.classList.add('hello')element.classList.remove('bye')
const element = document.getElementsByTagName('div')[0] element.classList.add('hello') element.classList.remove('bye')
🛠 В HTML часто используют data-атрибуты. Они используются, когда нужно передать данные через HTML. Например, когда сервер собирает стартовый HTML, он может поместить значения в data-атрибуты. Фронтендер затем может использовать их, вместо того, чтобы отправлять запрос на сервер. Название таких атрибутов начинаются с префикса data
. Для доступа к ним из JavaScript используется свойство dataset
:
const element = document.getElementsByTagName('div')[0]// получить значение атрибута data-columns тега divconsole.log(element.dataset.columns)// изменить значениеelement.dataset.columns = 99
const element = document.getElementsByTagName('div')[0] // получить значение атрибута data-columns тега div console.log(element.dataset.columns) // изменить значение element.dataset.columns = 99
🛠 У элементов очень много свойств. Если нужно что-то получить из элемента, то скорее всего уже есть свойство, которое хранит эти данные.
🛠 Если нужно удалить элемент и все вложенные в него, воспользуйтесь методом remove
:
const element = document.querySelector('#some-element')element.remove()
const element = document.querySelector('#some-element') element.remove()