33 votes

Pourquoi les navigateurs injectent-ils toujours <tbody> en HTML5?

Doctype HTML5 exemple.

Les deux IE9 et Chrome14 journal TBODY le tagName de l'élément à l'intérieur de l' <table>

La spec HTML5 sur <table> stipule clairement :

suivi par zéro ou plus tbody éléments ou un ou plusieurs éléments de tr

En outre. La spec HTML5 sur <tr> stipule clairement :

En tant qu'enfant d'un élément de tableau, après une légende, colgroup, et les éléments thead, mais seulement si il n'y a pas tbody les éléments enfants de l'élément de la table.

Pourquoi les navigateurs corrompre mon DOM et l'injection d'un <tbody> lorsque

  • Je n'ai pas demandé pour un
  • Il est parfaitement valide sans une

La réponse de "rétro compatibilité" fait absolument aucun sens parce que j'ai spécialement choisi pour un doctype HTML5.

39voto

duri Points 8246

La réponse de "rétro compatibilité" fait absolument aucun sens parce que j'ai spécialement choisi pour un doctype HTML5.

Cependant, les navigateurs ne font pas la différence entre les versions de HTML. Les documents HTML avec un doctype HTML5 et avec HTML4 doctype (avec la petite exception de HTML4 transitoire doctype sans URL dans FPI) sont analysés et rendus de la même façon.

Je vais vous citer la partie pertinente de HTML5 analyseur description:

8.2.5.4.9 L' "dans le tableau" mode d'insertion

...

Une balise de début dont la balise est un nom de: "td", "th", "tr"

Agir comme si une balise de début de jeton avec le nom de la balise "tbody" avait été vu, puis retraiter le jeton actuel.

18voto

zzzzBov Points 62084

Vous êtes complètement à côté de la partie de la spec HTML5 qui spécifie la façon dont l' arbre est construit.

La spécification permet d'écrire un table sans tbody élément, tel qu'il est implicite. Tout comme si vous ignorez l' html, head ou body d'ouverture ou de fermeture des balises, votre page peut encore être rendu correctement.

Je suppose que vous aimeriez que le DOM pour contenir un body de votre contenu doit-il être de gauche pour une raison quelconque. Il en va de même pour l' tbody. Il est ajouté, car il explicitement suppose que vous avez oublié de l'ajouter vous-même.

Les règles pour le tableau d'analyse

Une balise de début dont la balise est un nom de: "td", "th", "tr"

Agir comme si une balise de début de jeton avec le nom de la balise "tbody" avait été vu, puis retraiter le jeton actuel.

7voto

Šime Vidas Points 59994

D'après mon expérience, les navigateurs ne font pas de différence entre les documents HTML5 et HTML4. Ils se comportent de la même façon pour les deux. Le <!doctype html> ne déclenche aucun comportement spécial dans les navigateurs.

Et aussi <!doctype html> n'est pas réservé aux "documents HTML5" - c'est juste le doctype le plus simple possible qui déclenche le mode standard.

5voto

Alohci Points 30645

Une grande partie de cela vient à propos, car HTML5 fusionne le successeur de HTML 4 et XHTML 1.x en un seul cahier des charges.

Lorsque XHTML 1.0 a été introduit et les navigateurs ont commencé à expérimenter avec l'aide d'un analyseur XML, elles se heurtent à un problème. Les auteurs ont été utilisés pour la rédaction <table>s sans <tbody>s. Depuis un analyseur XML n'est pas autorisé à déduire les balises HTML des analyseurs de fait, la meilleure façon d'aider les auteurs à la transition vers le XHTML (qui semblait être une bonne idée à l'époque), pour obtenir les tables de rendre correctement en autorisant <tr>s sont les enfants directs d' <table> à l'intérieur de la DOM. (Le DOM est, autant que possible, les mêmes, indépendamment de savoir si il est originaire de un HTML analyser ou XML parser.) Si les navigateurs de soutien mis en œuvre pour cela.

Maintenant, le HTML5 modèle de contenu est partagé entre le HTML et le XHTML serializations de HTML5, de sorte qu'il doit permettre à la fois des arrangements, c'est à dire avec ou sans tbody.

D'autre part, dans la section sur "La Syntaxe HTML" (qui ne s'applique pas à l'analyseur XML), il est clair qu'un HTML analyser permettra de déduire la tbody balises.

Lors de l' <table><tr><td>my text</td></tr></table> est servi en text/html la structure de la table créée dans les DOM aura le tr comme un enfant direct d'un tbody qui est l'enfant direct de la table. Le contenu HTML5 modèle dit que c'est OK.

Lors de l' <table><tr><td>my text</td></tr></table> est servi en application/xhtml+xml la structure de la table créée dans les DOM aura le tr comme un enfant direct de la table. Le contenu HTML5 modèle dit c'est aussi OK.

Il est également possible de créer un tr comme un enfant direct de table via des scripts. Pour la même raison, les navigateurs traiter cela comme une ligne de la table comme la plupart des gens s'attendent à.

3voto

NikiC Points 47270

C'est pour des "raisons historiques" (c'est à dire la compatibilité descendante, quelque chose qui est très important pour HTML):

Pour des raisons historiques, certains éléments ont des restrictions supplémentaires au-delà même de la restriction donnée par leur modèle de contenu.

Un table élément ne doit pas contenir d' tr éléments, même si ces les éléments sont techniquement autorisé à l'intérieur d' table - éléments, en fonction le contenu des modèles décrits dans cette spécification. (Si un trélément est mis à l'intérieur d'un table dans le balisage, il va, en fait, impliquent un tbody balise de début de l'avant.)

Veuillez noter que cette citation est de la "Syntaxe HTML" section. Cette section ne s'applique qu'à des documents, des outils de création et de balisage des générateurs et explicitement de ne pas la conformité aux dames (qui ont besoin d'utiliser le HTML algorithme d'analyse).

Donc: La spécification indique que l'utilisation d' tr hors tbody est autorisé que par le modèle de contenu et l'analyse de cahier des charges, mais tout ce qui génère du code HTML (y compris VOUS) devez utiliser tbody.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X