J'ai consulté le code source html, il n'y a pas de <tbody>
mais lorsqu'il est consulté via firebug dans l'onglet HTML, <tbody>
apparaît. Savez-vous pourquoi ?
Réponses
Trop de publicités?Pour résumer les excellentes explications données dans les réponses et commentaires de bobince, Kieron, Alohci et d'autres :
- Firebug affiche simplement le DOM de la page analysée. En raison de règles d'analyse HTML compliquées, le DOM sera "différent" (dans un certain sens) du HTML source.
- Dans ce cas, le
TBODY
dans le DOM est ajouté par l'analyseur HTML. Notez que cette analyse bizarre est limitée aux documents text/html et qu'en XHTML le DOM correspond étroitement au XML source.- Ce comportement a été spécifié dans HTML 4 . Le modèle de contenu (enfants autorisés) pour
table
es(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
--tr
ne sont autorisés que dans lestbody
! La spécification dit quetbody
La balise de début de l'article est facultative, ce qui est censé signifier que si l'analyseur HTML rencontre l'articletr
directement à l'intérieur d'untable
il insère letbody
balise de début omise par l'auteur. - Pour rendre les choses plus claires, HTML 5 définit des règles d'analyse syntaxique très détaillées, notamment pour ce cas de figure : " Lorsque le mode d'insertion est "en tableau", les tokens doivent être traités comme suit : [...] Une balise de début dont le nom de balise est l'un de : "td", "th", "tr" -> Agir comme si un jeton de balise de début dont le nom de balise est "tbody" avait été vu, puis retraiter le jeton courant."
- Ce comportement a été spécifié dans HTML 4 . Le modèle de contenu (enfants autorisés) pour
Firefox les ajoute, car le standard le dit.
TABLE
n'est pas autorisé à contenir TR
directement, ils doivent être contenus dans des éléments THEAD
, TFOOT
o TBODY
. Mais pour des raisons de simplicité et de rétrocompatibilité, la balise de début de l'élément TBODY
peut être omis "lorsque le tableau ne contient qu'un seul corps de tableau et aucune section d'en-tête ou de pied de tableau" ; dans ce cas, l'élément est déduit par le navigateur.
A.19. Éléments explicites
Utilisez des éléments tbody explicites dans les tableaux.
Justification : Alors que le modèle de contenu de l'élément table permet de sauter l'élément tbody, en HTML 4, cet élément est implicite. Les agents utilisateurs de HTML 4 ajouteront silencieusement cet élément, ce qui risque de perturber les scripts ou les feuilles de style.
Source : http://www.w3.org/TR/2009/NOTE-xhtml-media-types-20090116/#compatGuidelines