Работа с DOM в JavaScript
JavaScript DOM (объектная модель документа) — это интерфейс, который позволяет разработчикам управлять содержимым, структурой и стилем веб-сайта. В этом уроке мы узнаем, что такое DOM, как его создать и как его можно изменить с помощью JavaScript. Как правило, веб-сайт состоит из документа HTML и CSS, а браузер создает представление документа, известное как объектная модель документа (DOM). Этот документ позволяет JavaScript манипулировать и работать с элементами и стилями веб-сайта. Модель в основном строится с использованием древовидной структуры объектов и определяет:
- HTML-элементы как объекты
- Свойства этих элементов HTML и,
- Методы доступа к одним и тем же элементам.
Структура DOM JavaScript
Места элементов называются узлами, а атрибуты и текст также получают свои узлы.
Особенности ДОМ
Важно отметить, что с помощью DOM JavaScript может получать доступ ко всем элементам HTML-документа и изменять их. Таким образом, следующие особенности DOM:
- JavaScript может изменить все атрибуты HTML на странице.
- JavaScript может изменять все элементы HTML на странице.
- JavaScript может изменить все стили CSS на веб-сайте.
- JavaScript может удалять и манипулировать существующими элементами и атрибутами HTML.
- JavaScript также может добавлять новые элементы и атрибуты HTML.
- JavaScript может реагировать на все существующие HTML-события на странице.
- JavaScript также может создавать новые HTML-события на странице.
Ниже приведен список, в котором указаны методы DOM и их описания.
- addEventListener() — Метод addEventListener() используется для присоединения обработчика события к определенному элементу.
- appendChild() — метод «appendChild()» используется для добавления нового дочернего узла к элементу.
- blur() — метод «blur()» используется для удаления фокуса с HTML-элемента.
- click() — метод click() выполняет щелчок мышью по элементу HTML.
- cloneNode() — метод «cloneNode()» используется для клонирования элемента.
- ближайший () — метод «близкий ()» используется для поиска в дереве DOM ближайшего элемента, который соответствует указанному селектору CSS.
- compareDocumentPosition() — метод «compareDocumentPosition()» используется для сравнения позиции документа двух элементов HTML.
- exitFullscreen() — Свойство «exitFullscreen()» отменяет отображение элемента в полноэкранном режиме.
- focus() — метод focus() используется для назначения фокуса элементу HTML.
- getAttribute() — Метод getAttribute() отображает значение атрибута элемента.
- getAttributeNode() — Метод getAttributeNode() отображает указанный узел атрибута.
- getBoundingNode() — метод getBoundingClientRect() выводит положение и размер элемента, связанного с окном просмотра.
- getElementsByClassName() — Метод getElementByClassName() отображает список дочерних элементов определенного класса.
- getElementsByTagName() — Метод getElementsByTagName() отображает список дочерних элементов определенного тега.
- hasAttribute() — метод hasAttribute() возвращает true, если элемент имеет добавленный атрибут; в противном случае возвращается ложь.
- hasChildNodes() — метод hasChildNodes() возвращает true, если у определенного элемента есть дочерние узлы; в противном случае возвращается ложь.
- insertAdjacentElement() — метод «insertAdjacentElement()» используется для вставки элемента HTML в определенную позицию, связанную с активным элементом.
- insertAdjacentHTML() — метод «insertAdjacentHTML()» используется для вставки текста в формате HTML в определенную позицию, связанную с активным элементом.
- insertAdjacentText() — метод «insertAdjacentText()» используется для вставки текста в определенную позицию, связанную с активным элементом.
- insertBefore() — метод «insertBefore()» используется для вставки нового дочернего узла перед существующим дочерним узлом.
- isDefaultNamespace() — метод isDefaultNamespace() выводит значение true, если определенный URI пространства имен установлен по умолчанию; в противном случае возвращается ложь.
- isEqualNode() — метод isEqualNode() используется для проверки равенства двух HTML-элементов.
- isSameNode() — метод isSameNode() используется для проверки того, являются ли два элемента HTML одними и теми же узлами или нет.
- isSupported() — метод isSupported() возвращает значение true, если для элемента HTML поддерживается определенная функция.
- match() — метод match() выводит логическое значение, указывающее, соответствует ли конкретный селектор CSS элементу или нет.
- normalize() — метод «normalize()» используется для соединения соседних текстовых узлов и удаления пустых текстовых узлов из HTML-элемента.
- querySelector() — метод «querySelector()» используется для вывода первого дочернего элемента, который соответствует определенному селектору CSS элемента HTML.
- querySelectorAll() — метод «querySelectorAll()» возвращает все дочерние элементы, которые соответствуют указанному селектору CSS элемента.
- remove() — метод «remove()» используется для удаления определенного элемента HTML из DOM. .
- removeAttribute() — метод «removeAttribute()» используется для удаления определенного атрибута из элемента HTML.
- removeAttributeNode() — Метод «removeAttributeNode()» удаляет добавленный узел атрибута и отображает его как вывод.
- removeChild() — метод «removeChild()» используется для удаления определенного дочернего узла из элемента HTML.
- removeEventListener() — метод removeEventListener() используется для удаления прикрепленного обработчика событий.
- replaceChild() — Метод replaceChild() используется для замены дочернего узла из элемента HTML.
- requestFullscreen() — метод requestFullscreen() используется для отображения HTML-элемента в полноэкранном режиме.
- scrollIntoView() — метод «scrollIntoView()» используется для прокрутки определенного элемента HTML в видимую область браузера.
- setAttribute() — Метод setAttribute() используется для установки атрибутов в добавленное значение.
- toString() — метод toString() используется для преобразования элемента в строку.
Как создать DOM в JavaScript
В этой части мы создадим DOM в JavaScript и прикрепим его к дереву DOM.
- Во-первых, мы используем метод
createElement()
.
const element = document.createElement(htmlTag);
- В нашем примере мы создадим элемент
<div>
.
const e = document.createElement('div');
- Мы заполним
<div>
HTML-контентом.
e.innerHTML = 'JavaScript DOM';
- Затем мы присоединяем элемент
<div>
к дереву DOM с помощью методаappendChild()
:
document.body.appendChild(e);
- Теперь мы можем использовать методы DOM для создания текстовых узлов и добавления текстовых узлов к новому элементу:
var textnode = document.createTextNode('JavaScript DOM'); e.appendChild(textnode);
- После этого мы можем использовать метод
appendChild()
для присоединения нового элемента к дереву DOM.
Основные типы данных и их влияние на DOM
В следующей таблице кратко описаны основные типы данных при создании модели DOM в JavaScript.
Когда возвращается объект типа document, этот объект сам становится корневым объектом документа.
Каждый объект, расположенный в документе, является узлом. В документе HTML объект может быть узлом элемента, текстовым узлом или даже узлом атрибута.
Тип элемента основан на узле. Это относится к элементу, возвращаемому членом DOM API. Например, вместо того, чтобы говорить, что метод document.createElement() возвращает ссылку объекта на узел, мы можем сказать, что этот метод возвращает только что созданный элемент в DOM.
Список узлов — это массив элементов. Доступ к элементам в nodeList осуществляется по индексу двумя способами: list.item(1)
или list[1]
. Во-первых, item() — это единственный метод объекта nodeList. Напротив, другой использует типичный синтаксис массива для выборки второго элемента в списке.
Когда атрибут возвращается (например, методом createAttribute()), он действует как ссылка на объект, которая предоставляет особый вид для других атрибутов.
NamedNodeMap подобен массиву, но доступ к элементам осуществляется по имени или индексу. Элементы могут быть добавлены или удалены из namedNodeMap.
Повтор сеанса с открытым исходным кодом
OpenReplay – это пакет для воспроизведения сеансов с открытым исходным кодом, который позволяет вам видеть, что пользователи делают в вашем веб-приложении, помогая вам быстрее устранять неполадки. OpenReplay размещается на собственном сервере для полного контроля над вашими данными.
Начните получать удовольствие от отладки — начните использовать OpenReplay бесплатно.
Основные интерфейсы в DOM
Объекты документа и окна — это объекты, интерфейсы которых мы чаще всего используем в программировании DOM. По сути, объект окна представляет собой что-то вроде браузера, а объект документа является корнем самого документа. Ниже приведен краткий список распространенных API-интерфейсов в сценариях веб-страниц и XML-страниц с использованием модели DOM.
[document.querySelector(selector)](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector)
[document.querySelectorAll(name)](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll)
[document.createElement(name)](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement)
[parentNode.appendChild(node)](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)
[element.innerHTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)
[element.style.left](https://www.w3schools.com/jsref/prop_style_left.asp)
[element.setAttribute()](https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute)
[element.getAttribute()](https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute)
[element.addEventListener()](https://w3schools.com/jsref/met_element_addeventlistener.asp)
[window.content](https://developer.mozilla.org/en-US/docs/Web/API/Window/content)
[GlobalEventHandlers/onload](https://reference.codeproject.com/dom/GlobalEventHandlers/onload)
[window.scrollTo()](https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo)
Модификация DOM с использованием примеров кода
Как установить текстовое содержимое;
- Чтобы получить текстовое содержимое узла и его потомков, воспользуемся свойством
textContent
:
let text = node.textContent; - И у нас уже есть следующий фрагмент HTML:
<div id="note"> JavaScript textContent Demo <span style="display:none">Hidden Text</span> </div>
Приведенный выше код объясняется ниже;
- Сначала выберите элемент
div
с примечанием id, используя методgetElementById
. - Затем отобразите текст узла, обратившись к свойству
textContent
.
Вывод кода;
JavaScript textContent Demo Hidden Text
Как добавить дочерний элемент
В следующем примере метод appendChild()
используется для добавления трех элементов списка к элементу <ul>
:
- Предположим, что у нас есть следующий HTML-код:
<ul id="menu"> </ul>
- Мы создаем следующий код JavaScript;
function createMenuItem(name) { let li = document.createElement('li'); li.textContent = name; return li; } // get the ul#menu const menu = document.querySelector('#menu'); // add menu item menu.appendChild(createMenuItem('Home')); menu.appendChild(createMenuItem('Services')); menu.appendChild(createMenuItem('About Us'));
Код объясняется ниже:
- Во-первых, функция
createMenuItem()
создает новый элемент элемента списка с указанным именем, используя методcreateElement()
. - После чего выбираем элемент
<ul>
с idmenu
методомquerySelector()
. - Наконец, мы вызываем функцию
createMenuItem()
для создания нового пункта меню и используем методappendChild()
для добавления пункта меню к элементу<ul>
.
Вывод кода;
Как получить коллекцию элементов в документе
Мы будем использовать метод getElementsByTagName()
в HTML, чтобы вернуть коллекцию всех элементов в документе с заданным именем тега.
Синтаксис:
var elements = document.getElementsByTagName(name);
Где:
- elements — это коллекция всех найденных элементов в том порядке, в котором они появляются с заданным именем тега в документе.
- name — это строка, представляющая имя элементов.
Пример кода;
<!DOCTYPE html> <html> <head> <title>DOM getElementsByTagName() Method</title> </head> <body style = "text-align: center"> <h1 style = "color: green;"> Great minds </h1> <h2 > DOM getElementsByTagName() </h2> <p>A computer science portal for nerds.</p> <button onclick="nerd()">Try it</button> <script> function nerd() { var doc = document.getElementsByTagName("p"); doc[0].style.background = "green"; doc[0].style.color = "white"; } </script> </body> </html>
Код объясняется ниже:
- Сначала мы создали тег
<p>
. - Во-вторых, мы создали функцию с именем
nerd()
и использовали методgetElementsByTagName()
для вызова абзаца «p».
Краткое содержание
В этом руководстве мы явно определили DOM, определили его функции и методы и представили демонстрационный код, который показывает, как создать DOM. Мы также обрисовали в общих чертах его основные типы данных и основные интерфейсы, а также проиллюстрировали, как модифицировать DOM с помощью примеров кода. Важно знать, что многое можно сделать с помощью методов и свойств DOM. Я считаю, что это руководство дало читателю лучшее представление и понимание того, как создавать и изменять DOM в JavaScript.
Ресурсы
- https://gabrieltanner.org/blog/javascript-dom-introduction/
- https://linuxhint.com/html-dom-methods-and-properties/
- https://www.javascripttutorial.net/dom/manipulating/create-a-dom-element/
- https://learn.saylor.org/mod/book/view.php?id=36824&chapterid=20206
СОВЕТ ОТ РЕДАКТОРА. Не пропустите нашу статью Shadom DOM: полное руководство по связанной теме.
Первоначально опубликовано на blog.openreplay.com 19 декабря 2022 г.