ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

JS Учебник

JS Старт JS Интро JS Установка JS Вывод JS Инструкции JS Синтаксис JS Комментарии JS Переменные JS Ключевое слово Let JS Ключевое слово Const JS Операторы JS Арифметические JS Присваивание JS Типы данных JS Функции JS Объекты JS События JS Строки JS Строковые методы JS Строковый поиск JS Строковые шаблоны JS Числа JS Числовые методы JS Массивы JS Методы массива JS Сортировка массива JS Итерация массива JS Массив Const JS Даты JS Форматы дат JS Методы получения дат JS Методы установки дат JS Математические JS Рандомные JS Булевы JS Сравнения JS Условия JS Switch JS Цикл For JS Цикл For In JS Цикл For Of JS Цикл While JS Break и Continue JS Итерации JS Наборы JS Карты JS Typeof JS Преобразование типов JS Побитовые JS Регулярные выражения JS Ошибки JS Область действия JS Хостинг JS Use Strict JS Ключевое слово this JS Функция стрелки JS Классы JS JSON JS Отладка JS Гид по стилю JS Лучшие практики JS Распространенные ошибки JS Производительность JS Зарезервированные слова

JS Версии

JS Версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/Edge JS История

JS Объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Доступ к объектам Конструкторы объектов Прототипы объектов Итерируемые объекты Наборы объектов Карты объектов Справочник объектов

JS Функции

Определения функций Параметры функции Обращение к функции Вызов функции Применение функции Закрытие функции

JS Классы

Введение Наследование класса Статические методы

JS Асинхронный

Обратные вызовы Асинхронный Промисы Async/Await

JS HTML DOM

DOM Введение DOM Методы DOM Документ DOM Элементы DOM HTML DOM Формы DOM CSS DOM Анимация DOM События DOM Слушатель событий DOM Навигация DOM Узлы DOM Коллекции DOM Узловые списки

JS Браузер BOM

JS Окно JS Скрин JS Локация JS История JS Навигатор JS Всплывающее оповещение JS Тайминг JS Куки

JS Веб API

Веб API Интро Веб-формы API Веб-история API Веб-хранилище API Веб-воркер API Веб-выборка API Веб-геолокация API

JS AJAX

AJAX Интро AJAX XMLHttp AJAX Запрос AJAX Отклик AJAX XML Файл AJAX PHP AJAX ASP AJAX База данных AJAX Приложения AJAX Примеры

JS JSON

JSON Введение JSON Синтаксис JSON и XML JSON Типы данных JSON Анализ JSON Stringify JSON Объекты JSON Массивы JSON Сервер JSON PHP JSON HTML JSON JSONP

JS и jQuery

jQuery Селекторы jQuery HTML jQuery CSS jQuery DOM

JS Примеры

JS Примеры JS HTML DOM JS HTML Input JS HTML Объекты JS HTML События JS Браузер JS Редактор JS Упражнения JS Викторина JS Сертификат

JS Справочники

JavaScript Объекты HTML DOM Объекты

JavaScript. W3Schools на русском. Уроки для начинающих

En Ua

JavaScript HTML DOM Навигация


С помощью модели HTML DOM вы можете перемещаться по дереву узлов, используя взаимосвязи узлов.


DOM Узлы

Согласно стандарту W3C HTML DOM, все в документе HTML является узлом:

  • Весь документ представляет собой узел документа
  • Каждый элемент HTML является узлом элемента
  • Тексты внутри HTML-элементов являются текстовыми узлами
  • Каждый атрибут HTML является узлом атрибута (не рекомендуется)
  • Все комментарии являются узлами комментариев
DOM HTML дерево

В HTML DOM все узлы в дереве узлов доступны с помощью JavaScript.

Можно создавать новые узлы, а все узлы можно изменять или удалять.


Отношения узлов

Узлы в дереве узлов имеют иерархические отношения друг с другом.

Термины "родитель", "потомок" и "брат или сестра" используются для описания отношений.

  • В дереве узлов верхний узел называется корнем (или корневым узлом)
  • Каждый узел имеет ровно один родительский элемент, кроме корня (у которого нет родителя)
  • Узел может иметь несколько дочерних элементов
  • Родственники (братья или сестры) - это узлы с одним и тем же родителем
<html>

  <head>
    <title>DOM Учебник</title>
  </head>

  <body>
    <h1>DOM Урок первый</h1>
    <p>Hello world!</p>
  </body>

</html>
Node tree

Из приведенного выше HTML вы можете прочитать:

  • <html> это корневой узел
  • <html> не имеет родителей
  • <html> является родителем <head> и <body>
  • <head> является первым дочерним элементом <html>
  • <body> является последним дочерним элементом <html>

и:

  • <head> имеет один дочерний элемент: <title>
  • <title> имеет один дочерний элемент (текстовый узел): "DOM Tutorial"
  • <body> имеет два дочерних элемента: <h1> и <p>
  • <h1> имеет один дочерний элемент: "DOM Первый урок"
  • <p> имеет один дочерний элемент: "Hello world!"
  • <h1> и <p> являются родственными

Перемещение между узлами

Вы можете использовать следующие свойства узла для перехода между узлами с помощью JavaScript:

  • parentNode
  • childNodes[nodenumber]
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

Дочерние узлы и значения узлов

Распространённая ошибка при обработке DOM - ожидание, что узел элемента будет содержать текст.

Пример:

<title id="demo">DOM Учебник</title>

Узел элемента <title> (в приведенном выше примере) не содержит текст.

Он содержит текстовый узел со значением "DOM Учебник".

Доступ к значению текстового узла можно получить с помощью свойства узла innerHTML:

myTitle = document.getElementById("demo").innerHTML;

Доступ к свойству innerHTML аналогичен доступу к nodeValue первого дочернего элемента:

myTitle = document.getElementById("demo").firstChild.nodeValue;

Доступ к первому дочернему элементу ещё можно сделать так:

myTitle = document.getElementById("demo").childNodes[0].nodeValue;

Все (3) следующие примеры извлекают текст элемента <h1> и копируют его в <p> элемент:

Пример:

<html>
<body>

<h1 id="id01">Моя первая страница</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML;
</script>

</body>
</html>
Попробуйте сами »

Пример:

<html>
<body>

<h1 id="id01">Моя первая страница</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>

</body>
</html>
Попробуйте сами »

Пример:

<html>
<body>

<h1 id="id01">Моя первая страница</h1>
<p id="id02">Hello!</p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>

</body>
</html>
Попробуйте сами »

InnerHTML

В этом учебнике мы используем свойство innerHTML для получения содержимого элемента HTML.

Однако изучение других вышеперечисленных методов полезно для понимания древовидной структуры и навигации по DOM.


Корневые узлы DOM

Есть два специальных свойства, которые позволяют получить доступ ко всему документу:

  • document.body - тело документа
  • document.documentElement - полный документ

Пример:

<html>
<body>

<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = document.body.innerHTML;
</script>

</body>
</html>
Попробуйте сами »

Пример:

<html>
<body>

<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = document.documentElement.innerHTML;
</script>

</body>
</html>
Попробуйте сами »

Свойство nodeName

Свойство nodeName указывает имя узла.

  • nodeName только для чтения
  • nodeName узла элемента совпадает с именем тега
  • nodeName узла атрибута - это имя атрибута
  • nodeName текстового узла всегда #text
  • nodeName узла документа всегда #document

Пример:

<h1 id="id01">Моя первая страница</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName;
</script>
Попробуйте сами »

Примечание: nodeName всегда содержит имя тега в верхнем регистре элемента HTML.


Свойство nodeValue

Свойство nodeValue определяет значение узла.

  • nodeValue для узлов элементов null
  • nodeValue для текстовых узлов - это сам текст
  • nodeValue для узлов атрибутов - это значение атрибута

Свойство nodeType

Свойство nodeType доступно только для чтения. Возвращает тип узла.

Пример:

<h1 id="id01">Моя первая страница</h1>
<p id="id02"></p>

<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType;
</script>
Попробуйте сами »

Наиболее важные свойства nodeType:

Узел Тип Пример
ELEMENT_NODE 1 <h1 class="heading">W3Schools</h1>
ATTRIBUTE_NODE 2  class = "heading" (устарел)
TEXT_NODE 3 W3Schools
COMMENT_NODE 8 <!-- Это комментарий -->
DOCUMENT_NODE 9 Сам HTML-документ (родительский элемент <html>)
DOCUMENT_TYPE_NODE 10 <!Doctype html>

Тип 2 устарел в HTML DOM (но работает). Он не является устаревшим в XML DOM.