2009-06-02 16 views
48

Stavo giocando con alcune idee usando html e JQuery. Una cosa che ho fatto è stata creare un elemento table con una serie di righe.Perché i browser inseriscono l'elemento tbody negli elementi della tabella?

<table id="MyTable" > 
    <tr> 
     <td>Title</td> 
    </tr> 
    <tr> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>4</td> 
    </tr> 
</table> 

Ma quando ho visto il codice in FireFox + Firebug, IE8 Developer Toolbar, oppure Google Chrome JavaScript Debugger ... tutti loro hanno mostrato che ci sia un tbody elemento che circonda tutto il TR i nodi.

Non sono contrario a questo evento ... ma questo comportamento standard?

+2

Questo è particolarmente fastidioso quando si sviluppano raschietti. C'è un modo per spegnerlo? O un'estensione per visualizzare il codice non elaborato inviato al browser? – hamstar

+2

È interessante notare che se stai esplorando il dom con JavaScript, la persona in più può far inciampare una persona ignara se non ne è a conoscenza. Significa che il contenuto nelle celle della tabella è annidato in profondità! –

+1

Particolarmente fastidioso quando si tenta di applicare gli stili CSS tramite il selettore di child: 'table> tr> td'. Devi usare un selettore discendente: 'table tr> td', o se vuoi essere severo, rispondi ad entrambi i casi:' table> tr> td, table> tbody> tr> td' – ADTC

risposta

49

http://htmlhelp.com/reference/html40/tables/tbody.html:

L'elemento TBODY definisce un gruppo di righe di dati in una tabella. Una TABELLA deve avere uno o più elementi TBODY, che devono seguire il TFOOT opzionale. Il tag di fine TBODY è sempre facoltativo. Il tag di inizio è facoltativo quando la tabella contiene solo un TBODY e nessun THEAD o TFOOT.

quindi c'è sempre un tbody lì (anche se a volte con entrambe le schede di fascia opzionali e omessi inizio e), e gli strumenti utilizzati siano corrette nel mostrare a voi.

thead or tfoot, d'altra parte, non sono mai presenti a meno che non le includiate esplicitamente, e se lo fate, anche i tbody devono essere espliciti.

+0

Non sono sicuro che il tuo link sia corretto, almeno secondo le specifiche. Vedi [questo] (http://stackoverflow.com/a/3078121/533832) altrove su SO. –

+4

@Jack Douglas: no, la specifica collegata a quella risposta dice esplicitamente '' e ' Start tag: facoltativo, End tag: opzionale' - ovvero, gli elementi di tabella hanno uno o più elementi tbody (il 'TBODY +') e gli elementi tbody hanno un optional (implicito se non specificato) inizia tag .; ammettiamolo, non è così diverso dal fatto che TBODY sia del tutto facoltativo, ma * questa * domanda riguarda proprio questa differenza - è nel DOM se è presente o meno nel testo html. – ysth

+0

Se hai una scopa, ma il manico della scopa e la testa della scopa sono entrambi opzionali, in realtà hanno una scopa? Il requisito è richiesto e tuttavia entrambi i tag sono facoltativi è un concetto piuttosto strano ed è uno dei motivi (di molti) per cui le specifiche sono così confuse e poco comprese. – tobuslieven

11

Sì, tbody è l'elemento standard che indica il corpo di un tavolo. Non è necessario inserirlo nel markup, ma sarà incluso nel DOM come hai visto.

+0

Perché non il thead, anche tu? ;-) – Cerebrus

+0

Sembra che tu possa averli. Ho pensato che w3schools avrebbe avuto più dettagli, ma questo è tutto ciò che ho trovato su un primo passaggio. http://www.w3schools.com/HTMLDOM/dom_obj_table.asp – MatrixFrog

+2

Perché non il tead/tfoot? Bene, perché non sono obbligati a rendere un tavolo dove è un tbody. –

Problemi correlati