Ваше понимание немного вышло, но я сосредоточусь на ключевом моменте.
Во-первых, DOM не содержит отдельных начальных и конечных элементов или тегов. Пара тегов {<body>,</body>}
создает один элемент с именем body
. Точно так же пара тегов {<span>,</span>}
создает один элемент с именем span
.
Как только синтаксический анализатор обнаруживает начальный тег, элемент создается и добавляется в DOM. Если анализ останавливается, весь DOM, созданный до этого момента, может быть отрендерен, при условии, что в это время не происходит выборки, блокирующей рендеринг.
Что касается конечных тегов, они в основном используются только для определения того, где заканчивается элемент, чтобы следующий элемент или текст в разметке не добавлялся как дочерний элемент только что завершившегося элемента.
Однако </body>
- это особый случай. Если синтаксический анализатор встречает теги или текст после тега </body>
, он будет "восстанавливать" DOM, помещая элементы и текст как дочерние элементы элемента body. Это не означает, что анализатор полностью игнорирует тег </body>
- если узел комментария сразу следует за тегом </body>
, он будет добавлен как дочерний элемент html-элемента, а не элемента body.