Многое из этого происходит потому, что HTML5 объединяет преемника HTML 4 и XHTML 1.x в единую спецификацию.
Когда был представлен XHTML 1.0 и браузеры начали экспериментировать с использованием анализатора XML, они нажалипроблема.Авторы привыкли писать <table>
с без <tbody>
с.Так как синтаксическому анализатору XML не разрешено выводить теги, как это сделали парсеры HTML, лучший способ помочь авторам перейти на XHTML (что в то время казалось хорошей идеей) - правильно настроить отображение таблиц, разрешив <tr>
s быть прямыми детьми <table>
внутри DOM.(DOM, насколько это возможно, одинаково, независимо от того, был ли он создан при анализе HTML или XML.) Таким образом, браузеры реализовали поддержку для этого.
Теперь модель содержимого HTML5 совместно используется HTMLи XHTML-сериализации HTML5, поэтому он должен учитывать обе договоренности, т. е. с или без tbody.
С другой стороны, в разделе «Синтаксис HTML» (который не применяется для синтаксического анализатора XML), он дает понять, что анализ HTML будет выводить теги tbody.
Когда <table><tr><td>my text</td></tr></table>
будет использоваться как text/html
структура таблицы, созданная в DOM, будет иметь tr какпрямой потомок тела, который является прямым потомком таблицы.Модель содержимого HTML5 говорит, что это нормально.
Когда <table><tr><td>my text</td></tr></table>
служит application/xhtml+xml
, структура таблицы, созданная в DOM, будет иметь tr как прямой дочерний элемент таблицы.Модель содержимого HTML5 говорит, что это тоже нормально.
Также можно создать tr как прямой дочерний элемент таблицы с помощью сценариев.По той же причине браузеры будут воспринимать это как строку таблицы, как и большинство людей ожидают.