Подтвердить что ты не робот

Загрузка DOM из HTML: как знает парсер HTML, когда пустой элемент заканчивается

В XML пустые элементы имеют соответствующий тег, помеченный значком /" > . Но этого нет в HTML. Так что парсер HTML имеет конечный список элементов, который может быть пустым. Что делать, если такой элемент имеет конечный тег?

4b9b3361

Ответ 1

В html есть теги, у которых есть закрывающий тег и тот, у кого его нет. И это более сбивает с толку после введения HTML5. После много исследований Вот что я нашел до сих пор. Надеюсь, вы поймете:)

У парсера HTML есть конечный список элементов, который может быть пустым.

Ответ: Да, парсеры HTML имеют конечный список пустых элементов. Парсер имеет определенные правила для синтаксического анализа и игнорирует пустые теги.

Это элементы, которые могут быть пустыми. (Источник: - Документация Mozilla

<link>
<track>
<param>
<area>
<command>
<col>
<base>
<meta>
<hr>
<source>
<img>
<keygen>
<br>
<wbr>
<colgroup> when the span is present
<input>

В HTML, использование закрывающего тега в пустом элементе недействительно. Например, <input type="text"></input> является недопустимым HTML, и синтаксический анализатор будет игнорировать те теги.

"Пустые элементы (элементы void)" были введены в HTML по ошибке: презентация разметка проникла на язык, вопреки духу SGML, и с некоторыми странными синтаксическими последствиями. Эта фундаментальная ошибка вызвало некоторые технические проблемы, такие как непреднамеренное несоответствие между HTML и XHTML, что вызывает неожиданности при проверке. Что еще более важно, это иллюстрирует последствия решения сделать HTML формально, и только формально, "приложение SGML". "Пустые элементы" больше чем они выглядят.

Источник (стоит прочитать): cs.tut.fi статья с пустыми элементами)

Что делать, если такой элемент имеет конечный тег?

Парсер будет игнорировать элемент с концевым тегом, и он будет использовать следующий элемент или символ для синтаксического анализа. И синтаксический анализатор будет игнорировать синтаксическую ошибку

Прочтите эту статью w3c, о элементах HTML, содержащих пустоты W3C Link

Статья о пустых элементах 456bereastreet

Цветная блики на пустых элементах Ссылка Colorglare

Ответ 2

Итак, у парсера HTML есть конечный список элементов, который может быть пустым.

Да. Анализаторы HTML знают правила для HTML, и эти правила говорят, какие элементы не имеют конечного тега (или необязательные конечные теги).

Например:

Начальный тег, имя тега которого является одним из следующих: "area", "br", "embed", "img", "keygen", "wbr"   
...
  Вставьте элемент HTML для токена. Сразу же вытащите текущий node из стека открытых элементов.


Что делать, если такой элемент имеет конечный тег?

Затем он недействителен и, как и любой другой конечный тег для тега, который не открыт, тег отбрасывается, когда парсер достигает его.

Если node не является текущим node, то это ошибка синтаксического анализа.