650 Stimmen

Können wir mehrere <tbody> in derselben <table> haben?

Können wir mehrere <tbody> Tags in derselben <table> ? Wenn ja, in welchen Szenarien sollten wir mehrere <tbody> Tags?

0 Stimmen

Wenn Sie darüber hinaus ein HTML-Dokument mit mehreren <tbody> Tags durch HTML-Validator des W3C mit einem HTML5 DOCTYPE, wird sie erfolgreich validiert.

781voto

Nick Craver Punkte 609016

Ja, man kann sie verwenden. Ich verwende sie zum Beispiel, um Datengruppen einfacher zu gestalten, etwa so:

thead th { width: 100px; border-bottom: solid 1px #ddd; font-weight: bold; }
tbody:nth-child(odd) { background: #f5f5f5;  border: solid 1px #ddd; }
tbody:nth-child(even) { background: #e5e5e5;  border: solid 1px #ddd; }

<table>
    <thead>
        <tr><th>Customer</th><th>Order</th><th>Month</th></tr>
    </thead>
    <tbody>
        <tr><td>Customer 1</td><td>#1</td><td>January</td></tr>
        <tr><td>Customer 1</td><td>#2</td><td>April</td></tr>
        <tr><td>Customer 1</td><td>#3</td><td>March</td></tr>
    </tbody>
    <tbody>
        <tr><td>Customer 2</td><td>#1</td><td>January</td></tr>
        <tr><td>Customer 2</td><td>#2</td><td>April</td></tr>
        <tr><td>Customer 2</td><td>#3</td><td>March</td></tr>
    </tbody>
    <tbody>
        <tr><td>Customer 3</td><td>#1</td><td>January</td></tr>
        <tr><td>Customer 3</td><td>#2</td><td>April</td></tr>
        <tr><td>Customer 3</td><td>#3</td><td>March</td></tr>
    </tbody>
</table>

Ein Beispiel können Sie hier sehen . Es wird nur in neueren Browsern funktionieren, aber das ist es, was ich in meiner aktuellen Anwendung unterstütze, Sie können die Gruppierung für JavaScript usw. verwenden. Die Hauptsache ist, dass es eine bequeme Möglichkeit ist, die Zeilen visuell zu gruppieren, um die Daten viel besser lesbar zu machen. Es gibt natürlich noch andere Verwendungszwecke, aber was die anwendbaren Beispiele angeht, so ist dies für mich der häufigste.

6 Stimmen

Ok, danke für die tolle Antwort. Ist es wichtig, Bildschirmleser, ein tbody oder mehrere?

1 Stimmen

@metal-gear-solid - Meiner Erfahrung nach gehen sie damit gut um, z.B.: als ob sie eins wären <tbody> . Wenn Sie anfangen Nest Tabellen, die in der Regel echte Navigationsprobleme für Bildschirmlesegeräte verursachen.

0 Stimmen

Daher ist die Verwendung von <tbody> ist nur visuell. Es gibt keinen semantischen Unterschied zwischen einem <tbody> und mehrere <tbody>

311voto

Martin Smith Punkte 417623

Ja. Von die DTD

<!ELEMENT table
     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>

Sie erwartet also einen oder mehrere. Dann heißt es weiter

Verwenden Sie mehrere tbody-Abschnitte, wenn Regeln zwischen Tabellengruppen erforderlich sind Zeilen.

13 Stimmen

Ab der HTML5-Spezifikation ändert sich dies geringfügig, aber das grundlegende "Ja, mehrere tbody Elemente sind in Ordnung) bleibt. Genauer gesagt, Sie sind jetzt erlaubt, den einen tfoot Element nach die tbody wenn Sie möchten . (Sie haben den DTD-Aspekt geschickt umgangen indem sie sagen, dass sie keins anbieten .) :-)

50voto

Kris van der Mast Punkte 16133

Diesem Beispiel aus der Spezifikation zufolge ist dies möglich: w3-struktur-tabellen .

Tabellenzeilen können in einen Tabellenkopf, einen Tabellenfuß und einen oder mehrere Tabellenkörperabschnitte unter Verwendung der Elemente THEAD, TFOOT und TBODY gruppiert werden.

17voto

John Slegers Punkte 41127

Das Problem von Martin Joiner ist auf ein Missverständnis der <caption> Tag.

El <caption> Tag definiert eine Tabellenüberschrift.

El <caption> Tag muss das erste Kind des <table> Tag.

Sie können nur eine Beschriftung pro Tabelle angeben.

Beachten Sie auch, dass die scope Attribut sollte in einer <th> Element und nicht auf einem <tr> Element.

Die richtige Art und Weise, eine Tabelle mit mehreren Überschriften und mehreren Zeilen zu schreiben, wäre etwa so:

<table id="dinner_table">
    <caption>This is the only correct place to put a caption.</caption>
    <tbody>
        <tr class="header">
            <th colspan="2" scope="col">First Half of Table (British Dinner)</th>
        </tr>
        <tr>
            <th scope="row">1</th>
            <td>Fish</td>
        </tr>
        <tr>
            <th scope="row">2</th>
            <td>Chips</td>
        </tr>
        <tr>
            <th scope="row">3</th>
            <td>Peas</td>
        </tr>
        <tr>
            <th scope="row">4</th>
            <td>Gravy</td>
        </tr>
    </tbody>
    <tbody>
        <tr class="header">
            <th colspan="2" scope="col">Second Half of Table (Italian Dinner)</th>
        </tr>
        <tr>
            <th scope="row">5</th>
            <td>Pizza</td>
        </tr>
        <tr>
            <th scope="row">6</th>
            <td>Salad</td>
        </tr>
        <tr>
            <th scope="row">7</th>
            <td>Oil</td>
        </tr>
        <tr>
            <th scope="row">8</th>
            <td>Bread</td>
        </tr>
    </tbody>
</table>

0 Stimmen

Spec empfiehlt die Verwendung von scope="rowgroup" (anstelle von col ) für die tbody Kopfzeilen. Siehe Beispiel .

9voto

CPslashM Punkte 71

Ja. Ich verwende sie, um den relevanten Teil einer Tabelle, z. B. einen Kurs, dynamisch ein- und auszublenden. Viz.

<table>
  <tbody id="day1" style="display:none">
    <tr><td>session1</td><tr>
    <tr><td>session2</td><tr>
  </tbody>
  <tbody id="day2">
    <tr><td>session3</td><tr>
    <tr><td>session4</td><tr>
  </tbody>
  <tbody id="day3" style="display:none">
    <tr><td>session5</td><tr>
    <tr><td>session6</td><tr>
  </tbody>
</table>

Es kann eine Schaltfläche vorgesehen werden, mit der man zwischen allem oder nur dem aktuellen Tag hin- und herschalten kann, indem man tbodies manipuliert, ohne viele Zeilen einzeln zu bearbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X