JavaScript Node — вузол DOM-дерева


Node (у перекладі — вузол) — базовий клас усього, що є в DOM-дереві: елементів, текстових вузлів, коментарів, самого документа.

автор: NagarD

Загальний опис

Тут криється пастка, на якій спотикаються всі новачки. У дереві живуть не лише теґи: пробіли й переноси рядків між ними — це теж вузли, текстові.

Звідси різниця, яку треба знати напам'ять:

  • childNodes віддає всі вузли — разом із текстовими «порожніми» проміжками;
  • children віддає лише елементи — теґи.

Тому element.childNodes.length у гарно відформатованій розмітці майже завжди більше, ніж очікуєш. У 99% випадків потрібні саме children, firstElementChild, nextElementSibling.

Тип вузла визначає nodeType: 1 — елемент, 3 — текст, 8 — коментар.

автор: NagarD

Порада

Правило просте: працюєш із теґами — бери властивості зі словом Element (children, firstElementChild). Без нього — отримаєш пробіли між теґами.

автор: NagarD

Синтаксис

element.parentNode;

властивості

Властивість Опис
childNodes Усі дочірні вузли, включно з текстовими.
firstChild Перший дочірній вузол.
lastChild Останній дочірній вузол.
nextSibling Наступний сусідній вузол.
previousSibling Попередній сусідній вузол.
parentNode Батьківський вузол.
parentElement Батьківський елемент (або null).
nodeName Назва вузла: ім'я тега, #text, #comment.
nodeType Числовий тип вузла: 1 — елемент, 3 — текст…
textContent Текстовий вміст вузла і всіх нащадків.
isConnected Чи під'єднаний вузол до документа.

методи

Метод Опис
appendChild Додає вузол у кінець дітей.
removeChild Видаляє дочірній вузол.
insertBefore Вставляє вузол перед заданою дитиною.
replaceChild Замінює дочірній вузол іншим.
cloneNode Клонує вузол; з true — разом із нащадками.
contains Чи є вузол нащадком цього.
hasChildNodes Чи має вузол дітей.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Node 1+ 1+ 1+ 7+ 12+ 5+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
Node yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Та сама пастка: childNodes бачить пробіли, children — ні.

HTML

<ul id="list">
    <li>Перший</li>
    <li>Другий</li>
</ul>

JS

const list = document.getElementById('list');

// пробіли й переноси між <li> — теж вузли!
console.log(list.childNodes.length); // 5
console.log(list.children.length);   // 2 — лише теґи

console.log(list.firstChild.nodeType);        // 3 — текст (перенос рядка)
console.log(list.firstElementChild.nodeType); // 1 — елемент <li>

// створення й вставка
const item = document.createElement('li');
item.textContent = 'Третій';
list.append(item);

// перевірка вкладеності
console.log(list.contains(item)); // true
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід