DOM Basics

Навигация по DOM

Научиться находить элементы через querySelector, getElementById, а также перемещаться по дереву: parent, children, siblings.

Начальный (Beginner)
Нужно знать:DOM-дерево

Кратко

querySelector находит первый элемент по CSS-селектору. querySelectorAll — все подходящие. getElementById — по id. После нахождения элемента можно перемещаться: parentElement, children, nextElementSibling, previousElementSibling.


Подробно

Три основных способа найти элемент:

  • document.querySelector(selector) — ПЕРВЫЙ элемент:

document.querySelector('p') — первый <p> document.querySelector('.card') — первый элемент с классом card document.querySelector('#app') — элемент с id app

  • document.querySelectorAll(selector) — ВСЕ элементы:

document.querySelectorAll('p') — NodeList всех <p> Возвращает NodeList (не массив!)

  • document.getElementById(id) — по id:

document.getElementById('app') — быстрее querySelector

Навигация по дереву:

Вверх: element.parentElement — родитель (только Element) element.parentNode — родитель (любой узел)

Вниз: element.children — прямые потомки (только Element) element.firstElementChild — первый потомок element.lastElementChild — последний потомок

По горизонтали: element.nextElementSibling — следующий сосед element.previousElementSibling — предыдущий сосед

Важно:

  • querySelector возвращает null, если не найден
  • querySelectorAll возвращает NodeList (не массив!)
  • getElementById возвращает null, если не найден
  • children — только Element, childNodes — все узлы

Ментальная модель

Навигация по DOM — как навигация по карте. querySelector — это «найти адрес по названию». parentElement — «пойти к родителю». children — «посмотреть, кто живёт в доме».


Примеры

**Самый простой:**

javascript
// Найти элемент:
const title = document.querySelector('h1');
console.log(title.textContent); // Текст заголовка

// Найти по id:
const app = document.getElementById('app');
console.log(app);

querySelector и getElementById — основные способы найти элемент.

**Простой:**

javascript
// Найти все элементы:
const paragraphs = document.querySelectorAll('p');
console.log(paragraphs.length); // Количество <p>

// Перебрать:
paragraphs.forEach(p => console.log(p.textContent));

// Навигация:
const first = paragraphs[0];
console.log(first.parentElement); // Родитель (div)
console.log(first.nextElementSibling); // Следующий <p>

querySelectorAll + forEach — удобный способ работать с коллекцией элементов.

**Реальный пример:**

javascript
// Реальный пример: найти элемент и получить его контекст
const activeItem = document.querySelector('.menu-item.active');

if (activeItem) {
  const menu = activeItem.parentElement;
  const items = menu.children;
  const index = Array.from(items).indexOf(activeItem);

  console.log(`Активный пункт ${index + 1} из ${items.length}`);
  console.log(`Родитель: ${menu.className}`);
}

Комбинация навигации: нашли элемент → нашли родителя → посчитали siblings.


Частые ошибки

**Неправильно:** Думать, что querySelectorAll возвращает массив

**Почему:** NodeList — не массив. Нет map, filter, reduce (хотя есть forEach).

**Правильно:** Для методов массивов: Array.from(nodeList) или [...nodeList].

**Неправильно:** Забывать, что querySelector возвращает null

**Почему:** querySelector возвращает null, если элемент не найден. Обращение к свойству null вызовет ошибку.

**Правильно:** Всегда проверяйте: if (title) { title.textContent = 'Новый'; }

**Неправильно:** Путать parentElement и parentNode

**Почему:** parentElement — только Element. parentNode — любой узел (включая Text, Comment).

**Правильно:** Используйте parentElement — он возвращает только Element.

**Неправильно:** Путать children и childNodes

**Почему:** children — только Element. childNodes — все узлы (включая текстовые).

**Правильно:** Для элементов используйте children.


Важно запомнить

  • querySelector(selector) — первый элемент по CSS-селектору
  • querySelectorAll(selector) — все элементы (NodeList)
  • getElementById(id) — по id (быстрее)
  • parentElement — родитель
  • children — прямые потомки (только Element)
  • nextElementSibling / previousElementSibling — соседи

Связь

Назад: Вы понимаете структуру DOM-дерева (D2) — теперь вы умеете по нему перемещаться.

Вперёд: Следующий урок (D4) — чтение и запись содержимого элемента: textContent, innerHTML и их различия.

Материалы курса DOM Basics — PROlab Academy.