Ответ 1
Подводя итог отличным объяснениям, приведенным в ответах и комментариях Бобинджа, Кирона, Алохчи и других:
- Firebug просто отображает DOM проанализированной страницы. Из-за сложных правил разбора HTML DOM будет "отличаться" (в некотором смысле) от исходного HTML.
- В этом случае элемент
TBODY
в DOM добавляется парсером HTML. Обратите внимание, что этот странный разбор ограничен документами text/html, а в XHTML DOM тесно связан с исходным XML.- Это поведение было указано в HTML 4. Модель контента (разрешенные дочерние элементы) для
table
равна(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
-tr
разрешена только вTBODY
! Спектр говорит, чтоTBODY
начальный тег является необязательным, что должно означать, что если парсер HTML встречаетtr
непосредственно внутриtable
, он вставляет тегTBODY
, опущенный автором. - Чтобы сделать более понятным, HTML 5 определяет очень подробные правила синтаксического анализа, в частности для этого случая: "Когда режим вставки" в таблице "", токены должны обрабатываться следующим образом: [...] Начальный тег, имя тега которого является одним из следующих: "td", "th", "tr" → действовать так, как если бы токен начального тега с именем тега" tbody "" был замечен, затем переработал текущий токен".
- Это поведение было указано в HTML 4. Модель контента (разрешенные дочерние элементы) для