Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки 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/пограничный История JS

JS-объекты

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

JS-функции

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

JS-классы

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

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

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

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

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

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

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

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


JavaScript HTML DOM-навигация


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


DOM-узлы

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

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

С помощью HTML DOM ко всем узлам в дереве узлов можно получить доступ с помощью JavaScript.

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


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

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

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

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

  <head>
    <title>DOM Tutorial</title>
  </head>

  <body>
    <h1>DOM Lesson one</h1>
    <p>Hello world!</p>
  </body>

</html>
Дерево узлов

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

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

и:

  • <head>имеет одного ребенка:<title>
  • <title>имеет один дочерний элемент (текстовый узел): "DOM Tutorial"
  • <body>имеет двоих детей: <h1>и<p>
  • <h1> имеет одного ребенка: «Урок DOM первый»
  • <p> имеет одного ребенка: «Привет, мир!»
  • <h1>и братья и <p>сестры


Навигация между узлами

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

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

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

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

Пример:

<title id="demo">DOM Tutorial</title>

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

Он содержит текстовый узел со значением «DOM Tutorial».

Доступ к значению текстового узла можно получить с помощью 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">My First Page</h1>
<p id="id02"></p>

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

</body>
</html>

Пример

<html>
<body>

<h1 id="id01">My First Page</h1>
<p id="id02"></p>

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

</body>
</html>

Пример

<html>
<body>

<h1 id="id01">My First Page</h1>
<p id="id02">Hello!</p>

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

</body>
</html>

Внутренний HTML

В этом руководстве мы используем свойство 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">My First Page</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">My First Page</h1>
<p id="id02"></p>

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

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

Node Type Example
ELEMENT_NODE 1 <h1 class="heading">W3Schools</h1>
ATTRIBUTE_NODE 2  class = "heading" (deprecated)
TEXT_NODE 3 W3Schools
COMMENT_NODE 8 <!-- This is a comment -->
DOCUMENT_NODE 9 The HTML document itself (the parent of <html>)
DOCUMENT_TYPE_NODE 10 <!Doctype html>

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