Почему браузеры не ищут первую «строку содержимого» для добавления «tbody», если вы явно не используете thead и tbody?

0

Когда я смотрю на W3schoool, исходный учебник или примеры не используют thead или tbody, но у меня есть код jquery, который выглядит так:

$("#mytable tbody tr:nth-child(odd)").addClass("oddColor");

или

$("#mytable tr:nth-child(odd)").addClass("oddColor");

и моя таблица выглядит так (не замечайте теги ада или тэга)

<table>
  <tr><th>Col1</th><th>Col2</th></tr>

  <tr><td>Row 1</td><td>Row 1</td></tr>
  <tr><td>Row 2</td><td>Row 2</td></tr>
  <tr><td>Row 3</td><td>Row 3</td></tr>
  <tr><td>Row 4</td><td>Row 4</td></tr>
</table>

делает ли jquery "th" row as tbody? и если браузеры автоматически добавляют в tbody, почему они не помещают его в строку "td" (вместо строки "th"). Похоже, что это так, но я бы подумал, что он будет искать первый "td", ряд.

Очевидно, добавив thead и tbody во все таблицы, он делает это на 100% явным, но я был просто смущен тем, что делает jquery, когда эти теги не существуют и почему они ведут себя так

Может быть, лучший вопрос: если браузеры добавляют в tbody, почему бы им не добавить tbody в строку td вместо th-й строки?

  • 0
    Почему бы вам не добавить их самим?
  • 1
    Я добавил это как часть вопроса. меня больше интересовало поведение браузера
Показать ещё 1 комментарий
Теги:
table

2 ответа

2
Лучший ответ

tbody создается автоматически, и обернуть все строки таблицы, если нет tbody или thead явно не используется. th допускается в пределах строк тела, нет "проверки" содержимого строк, чтобы видеть, какие строки должны быть строками головы или тела.

Если вам нужен thead, а строки, исключенные из tbody, вы должны добавить его явно - в этот момент вам также нужно будет добавить tbody.

См. Почему браузеры вставляют элемент tbody в элементы таблицы?

0

В RFC1942 (HTML Tables), с 1996 года, Дэйв Раггетт говорит

Таблицы можно разделить на разделы головы и тела. Элементы THEAD и TFOOT являются необязательными, но всегда требуются один или несколько элементов TBODY. Если таблица состоит только из раздела TBODY, теги начала и конца TBODY могут быть опущены, так как синтаксический анализатор может их вывести. Если присутствует элемент THEAD, требуется начальный тег THEAD, но конечный тег может быть опущен, если за ним следует начальный тег TFOOT или TBODY. То же самое относится к TFOOT.

Примечание. Это определение обеспечивает совместимость с таблицами, созданными для более старой модели, а также позволяет исключить теги конца для THEAD, TFOOT и TBODY. (мой акцент)

Элементы THEAD, TFOOT и TBODY обеспечивают удобные средства для управления рендерингом. Если таблица имеет большое количество строк в теле, пользовательские агенты могут использовать область прокрутки для разделов тела таблицы. При рендеринге к выгруженному устройству таблицы часто должны быть разбиты на границы страниц. Элементы THEAD, TFOOT и TBODY позволяют пользовательскому агенту повторять стопку таблицы внизу текущей страницы, а затем верхнюю часть таблицы вверху новой страницы, прежде чем продолжить работу с телом таблицы.

В HTML 3.0 появляется "более старая модель". Хотя HTML 3.0 был оставлен до завершения в пользу HTML 3.2, кажется, что по крайней мере некоторые таблицы в Интернете были созданы в течение этого периода. В нем говорится:

Модель контента: необязательный CAPTION, затем одна или несколько строк таблицы (TR)

Т.е. в то время не было элементов TBODY, THEAD или TFOOT.

Таким образом, предположение состояло бы в том, что те таблицы, созданные в то время, ожидали бы всех строк, независимо от того, содержат ли они элементы TH или элементы TD, чтобы иметь поведение, подобное тому, что относится к TBODY, например, строки не повторялись бы вверху и внизу каждой печатной страницы как и ожидалось, соответственно, THEAD и TFOOT.

Таким образом, для обратной совместимости только упаковка с TBODY согласуется с первоначальным использованием таблиц HTML.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню