Тэги / комментарии в HTML автоматически исправляются браузерами? - PullRequest
3 голосов
/ 25 марта 2012

Вместо

<!--  

,
Я использовал

<!-

... и он работает.

Как?

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

На самом деле это не работает - он просто интерпретирует его как фактический тег, а затем выбрасывает этот тег как недействительный.

<!- foo bar -->

рассматривается как тег, <!-foo bar-->, который, очевидно, не являетсястандартный HTML-тег, поэтому игнорируется.

Попробуйте, и вы увидите, что он не работает как комментарий:

<!- >foo bar-->
3 голосов
/ 25 марта 2012

Современные браузерные парсеры (то есть те, которые используют алгоритм синтаксического анализа HTML5) работают следующим образом. Если они ожидают следующий текст или новый тег и увидят <!, то они проверяют следующие несколько символов, чтобы определить, являются ли они -- или DOCTYPE или, если они обрабатывают встроенный SVG или MathML, [CDATA[ , (См. http://dev.w3.org/html5/spec/tokenization.html#markup-declaration-open-state)

Если, как и в случае <!- foo, ни одно из этих совпадений не соответствует, то синтаксический анализатор переходит в состояние фиктивного комментария , где все символы, следующие до следующего >, читаются и и преобразуется в комментарий для помещения в DOM.

Отсюда и поведение, которое вы видите, когда <!- работает как начало комментария. Обратите внимание, что такое поведение является поведением «исправления» для сломанной разметки, и не стоит полагаться на него.

Вы можете увидеть, как такая разметка формирует DOM здесь: Live DOM Viewer

Также обратите внимание, что это отличается от того, что говорит @Amber. Он не рассматривается как тег в каком-либо значимом смысле и, конечно, не игнорируется.

...