Блок 1 · Урок 7 из 7
HTML, который прислал сервер, — это всего лишь чертёж. DOM — это дом, реально построенный браузером по этому чертежу, по которому можно ходить и в котором JavaScript двигает мебель на лету.
Зачем это вам
«Обновим DOM», «элемента нет в DOM», «виртуальный DOM в React», «посмотри в Inspect» — агент роняет эти слова постоянно. За всеми ними стоит одно простое различие, которое почти никто не проговаривает: HTML — это не то же самое, что страница на экране. Поймёте разницу — и куча загадочных фраз агента (и «почему в исходном коде пусто, а на экране всё есть») станут очевидными. Для вашей аудитории это один из самых сильных моментов-«ага».
Из чертежа — в дом
Сервер присылает HTML — обычный текст. Браузер читает его и строит из него дерево объектов в своей памяти. Вот это дерево и есть DOM.1,2
🧱 HTML — чертёж (текст)
<body>
<div class="card">
<h1>Магазин</h1>
<button>Купить</button>
</div>
</body>То, что прислал сервер. Просто текст с угловыми скобками.
🌳 DOM — дерево в памяти
Живые элементы, вложенные друг в друга. По ним можно ходить и менять.
📌 Почему «дерево». Каждый элемент вложен в родительский: button внутри div, div внутри body — как папки внутри папок. Отсюда слова агента «родительский элемент», «потомок», «узел» (node), «найти элемент в дереве».
Аналогия, которую можно пересказать
Возьмём дом из прошлого урока — и доведём до конца:
Поэтому, когда по клику меняется текст или появляется окно, — это JavaScript меняет дом (DOM), а не переписывает чертёж (исходный HTML). Дом меняется на месте, без стройки заново — то есть без перезагрузки страницы.
Запомните одно различие
HTML — статичный текст, он приходит один раз и больше не меняется. DOM — живая копия страницы в памяти браузера; именно её меняет JavaScript, и именно её вы видите.
Отсюда знаменитая загадка вайб-кодера: открываешь «Исходный код страницы» (View Source) — а там почти пусто, хотя на экране полно всего. Всё просто: View Source показывает чертёж (исходный HTML), а контент достроил JavaScript уже в доме (DOM). Чтобы увидеть дом — нужен Inspect / «Просмотреть элемент».
Что это даёт на практике
DOM (Document Object Model) — живое представление страницы в памяти браузера в виде дерева элементов; строится из HTML, меняется через JavaScript.
Узел / элемент (node) — одна «вещь» в дереве: заголовок, кнопка, div.
Родитель / потомок — кто в кого вложен (отношения в дереве).
Рендер / ре-рендер — (пере)построение видимой страницы из текущего состояния DOM.
Проверьте себя
1. Чем DOM отличается от HTML?
HTML приходит как текст один раз; браузер строит из него DOM — живое дерево, которое потом и меняется.
2. По клику на кнопку текст на странице меняется. Что именно меняет JavaScript?
JS двигает «мебель» в построенном доме (DOM). Чертёж (исходный HTML) при этом не переписывается.
3. Агент говорит: «элемент не найден в DOM». Вероятная причина?
Классика: код полез за элементом, которого в дереве ещё нет. Дом не достроен — а мебель уже ищем.
4. «Просмотр исходного кода» (View Source) показывает почти пусто, но на экране полно контента. Почему?
Так часто устроены приложения (SPA — подробнее в блоке 4): сервер прислал почти пустой чертёж, а дом возвёл JavaScript. Поэтому это важно для SEO — поисковику нужно увидеть контент.
Куда мы идём