Naar de inhoud
Gratis naslagwerk over HTML
HTML leren en naslaan
Naslag / Tabellen

Het element <tr>

Het <tr>-element van HTML definieert een rij van cellen in een tabel. De cellen van de rij kunnen vervolgens worden vastgesteld met een combinatie van <td> (gegevenscel) en <th> (header-cel) elementen.

Code
<table>
  <caption>
    Alien football stars
  </caption>
  <thead>
    <tr>
      <th scope="col">Player</th>
      <th scope="col">Gloobles</th>
      <th scope="col">Za'taak</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">TR-7</th>
      <td>7</td>
      <td>4,569</td>
    </tr>
    <tr>
      <th scope="row">Khiresh Odo</th>
      <td>7</td>
      <td>7,223</td>
    </tr>
    <tr>
      <th scope="row">Mia Oolong</th>
      <td>9</td>
      <td>6,219</td>
    </tr>
  </tbody>
</table>
Resultaat in de browser

Attributen

Dit element bevat de globale attributen.

Verouderde attributen

De volgende attributen zijn verouderd en mogen niet meer worden gebruikt. Ze worden hieronder gedocumenteerd ter referentie bij het bijwerken van bestaande code en uit historisch belang.

align Verouderd

Specificeert de horizontale uitlijning van elke rijcel. De mogelijke enumerated-waarden zijn left, center, right, justify en char. Indien ondersteund, lijnt de waarde char de tekstuele inhoud uit op het teken dat is gedefinieerd in het char-attribuut en op de offset die is gedefinieerd door het charoff-attribuut. Gebruik in plaats daarvan de CSS-eigenschap text-align, aangezien dit attribuut verouderd is.

bgcolor Verouderd

Definieert de achtergrondkleur van elke rijcel. De waarde is een HTML-kleur; ofwel een 6-cijferige hexadecimale RGB-code, voorafgegaan door een #, ofwel een kleursleutelwoord. Andere CSS <color>-waarden worden niet ondersteund. Gebruik in plaats daarvan de CSS-eigenschap background-color, aangezien dit attribuut verouderd is.

char Verouderd

Specificeert de uitlijning van de inhoud op een teken van elke rijcel. Typische waarden hiervoor zijn een punt (.) wanneer wordt geprobeerd getallen of geldbedragen uit te lijnen. Als align niet is ingesteld op char, wordt dit attribuut genegeerd.

charoff Verouderd

Specificeert het aantal tekens waarmee de inhoud van de rijcel wordt verschoven ten opzichte van het uitlijningsteken dat is opgegeven in het char-attribuut.

valign Verouderd

Specificeert de verticale uitlijning van elke rijcel. De mogelijke enumerated-waarden zijn baseline, bottom, middle en top. Gebruik in plaats daarvan de CSS-eigenschap vertical-align, aangezien dit attribuut verouderd is.

Gebruiksnotities

  • Het <tr>-element is alleen geldig als kind van een <thead>-, <tbody>- of <tfoot>-element.
  • Als de <tr> als direct kind van het bovenliggende <table>-element wordt geplaatst, wordt de <tbody>-ouder impliciet verondersteld en voegen browsers de <tbody> toe aan de markup.
  • De impliciete <tbody>-ouder wordt alleen ondersteund als de <table> verder geen kind-<tbody>-elementen heeft, en alleen als de <tr> is opgenomen na eventuele <caption>-, <colgroup>- en <thead>-elementen.
  • De CSS-pseudoklassen :nth-of-type, :first-of-type en :last-of-type zijn vaak handig om de gewenste reeks rijen en hun gegevens- en headercellen (<td>- en <th>-elementen) te selecteren.
  • Wanneer een <tr> als direct kind van de <table> wordt opgenomen, doordat de browser een <tbody> aan de markup toevoegt, werken CSS-selectors zoals table > tr mogelijk niet zoals verwacht of helemaal niet.

Voorbeelden

Zie <table> voor een compleet tabelvoorbeeld waarin gangbare standaarden en best practices worden geïntroduceerd.

Basisopzet van een rij

Dit voorbeeld demonstreert een tabel met vier rijen en drie kolommen, waarbij de eerste kolom headers bevat voor de gegevenscellen van de rij.

HTML

Er worden vier <tr>-elementen gebruikt om vier tabelrijen te maken. Elke rij bevat drie cellen - één headercel (<th>) en twee gegevenscellen (<td>) - waardoor drie kolommen ontstaan. Het scope-attribuut dat op elke headercel is ingesteld, specificeert op welke cellen ze betrekking hebben, wat in dit voorbeeld alle gegevenscellen binnen de row betreft.

HTML
<table>
  <tbody>
    <tr>
      <th scope="row">A</th>
      <td>Alfa</td>
      <td>AL fah</td>
    </tr>
    <tr>
      <th scope="row">B</th>
      <td>Bravo</td>
      <td>BRAH voh</td>
    </tr>
    <tr>
      <th scope="row">C</th>
      <td>Charlie</td>
      <td>CHAR lee</td>
    </tr>
    <tr>
      <th scope="row">D</th>
      <td>Delta</td>
      <td>DELL tah</td>
    </tr>
  </tbody>
</table>

CSS

De CSS-pseudoklasse :nth-of-type wordt gebruikt om elke oneven rij te selecteren en de background-color van die rijen in te stellen op een iets donkerdere tint, waardoor een zogenaamd "zebrastreep"-effect ontstaat. Deze afwisselende achtergrond maakt de rijen met gegevens in de tabel gemakkelijker te doorgronden en te lezen - stel je voor dat je veel rijen en kolommen hebt en probeert bepaalde gegevens in een specifieke rij te vinden. Daarnaast worden de headercellen van de rij (<th>-elementen) gemarkeerd met een background-color om ze te onderscheiden van de gegevenscellen (<td>-elementen).

CSS
tr:nth-of-type(odd) {
  background-color: #eeeeee;
}

tr th[scope="row"] {
  background-color: #d6ecd4;
}
CSS
table {
  border-collapse: collapse;
  border: 2px solid rgb(140 140 140);
  font-family: sans-serif;
  font-size: 0.8rem;
  letter-spacing: 1px;
}

th,
td {
  border: 1px solid rgb(160 160 160);
  padding: 8px 10px;
}

Resultaat

Resultaat in de browser

Header-rij

Dit voorbeeld breidt de basistabel uit het vorige voorbeeld uit door een header-rij als eerste rij van de tabel toe te voegen.

HTML

Er wordt een extra tabelrij (<tr>) toegevoegd als de eerste rij van de tabel met kolomheadercellen (<th>) die een header voor elke kolom bieden. We plaatsen deze rij in een <thead>-groeperingselement om aan te geven dat dit de header van de tabel is. Het scope-attribuut wordt toegevoegd aan elke headercel (<th>) binnen deze head-rij om expliciet aan te geven dat elke headercel betrekking heeft op alle cellen binnen zijn eigen kolom, ook al bevinden die cellen zich in de <tbody>.

HTML
<table>
  <thead>
    <tr>
      <th scope="col">Symbol</th>
      <th scope="col">Code word</th>
      <th scope="col">Pronunciation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">A</th>
      <td>Alfa</td>
      <td>AL fah</td>
    </tr>
    <tr>
      <th scope="row">B</th>
      <td>Bravo</td>
      <td>BRAH voh</td>
    </tr>
    <tr>
      <th scope="row">C</th>
      <td>Charlie</td>
      <td>CHAR lee</td>
    </tr>
    <tr>
      <th scope="row">D</th>
      <td>Delta</td>
      <td>DELL tah</td>
    </tr>
  </tbody>
</table>

CSS

De CSS is nagenoeg ongewijzigd ten opzichte van het vorige voorbeeld, afgezien van wat extra styling om de "header-rij" te markeren, zodat de headers van de kolommen opvallen ten opzichte van de andere cellen.

CSS
tr:nth-of-type(odd) {
  background-color: #eeeeee;
}

tr th[scope="col"] {
  background-color: #505050;
  color: white;
}

tr th[scope="row"] {
  background-color: #d6ecd4;
}
CSS
table {
  border-collapse: collapse;
  border: 2px solid rgb(140 140 140);
  font-family: sans-serif;
  font-size: 0.8rem;
  letter-spacing: 1px;
}

th,
td {
  border: 1px solid rgb(160 160 160);
  padding: 8px 10px;
}

Resultaat

Resultaat in de browser

Rijen sorteren

Er zijn geen native methoden om de rijen (<tr>-elementen) van een <table> te sorteren. Maar met behulp van Array.prototype.sort(), Node.removeChild en Node.appendChild kan een aangepaste sort()-functie in JavaScript worden geïmplementeerd om een HTMLCollection van <tr>-elementen te sorteren.

HTML

In deze basistabel wordt een <tbody>-element gebruikt om het body-gedeelte van de tabel aan te duiden en om drie rijen (<tr>-elementen) met gegevens (<td>-elementen) op te nemen, waardoor één kolom ontstaat met getallen in aflopende volgorde.

HTML
<table>
  <tbody>
    <tr>
      <td>3</td>
    </tr>
    <tr>
      <td>2</td>
    </tr>
    <tr>
      <td>1</td>
    </tr>
  </tbody>
</table>

JavaScript

In de onderstaande JavaScript-code wordt de gemaakte sort()-functie toegevoegd aan het <tbody>-element, zodat de tabelcellen in oplopende volgorde worden gesorteerd en de weergave dienovereenkomstig wordt bijgewerkt.

JS
HTMLTableSectionElement.prototype.sort = function (cb) {
  Array.from(this.rows)
    .sort(cb)
    .forEach((e) => this.appendChild(this.removeChild(e)));
};

document
  .querySelector("table")
  .tBodies[0].sort((a, b) => a.textContent.localeCompare(b.textContent));
CSS
table {
  border-collapse: collapse;
  border: 2px solid rgb(140 140 140);
  font-family: sans-serif;
  font-size: 0.8rem;
  letter-spacing: 1px;
}

td {
  border: 1px solid rgb(160 160 160);
  padding: 4px 8px;
}

Resultaat

Resultaat in de browser

Rijen sorteren door op headercellen te klikken

Dit voorbeeld breidt de basistabel uit het vorige voorbeeld uit door het sorteren interactief en onafhankelijk te maken voor meerdere kolommen.

HTML

Er wordt een extra gegevenscel (<td>-element) toegevoegd aan elke rij (<tr>-element) binnen de tabelbody (<tbody>-element) om een tweede kolom te maken met letters in oplopende volgorde. Met behulp van het <thead>-element wordt een head-sectie toegevoegd vóór de body-sectie om een head-rij te introduceren met tabelheadercellen (<th>-element). Deze headercellen worden in de onderstaande JavaScript-code gebruikt om ze klikbaar te maken en vervolgens het bijbehorende sorteren uit te voeren wanneer ze door een klik worden geactiveerd.

HTML
<table>
  <thead>
    <tr>
      <th>Numbers</th>
      <th>Letters</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>3</td>
      <td>A</td>
    </tr>
    <tr>
      <td>2</td>
      <td>B</td>
    </tr>
    <tr>
      <td>1</td>
      <td>C</td>
    </tr>
  </tbody>
</table>

JavaScript

Er wordt een click-eventhandler toegevoegd aan elke tabelheader (<th>-element) van elke <table> in het document; deze sorteert alle rijen (<tr>-elementen) van de <tbody> op basis van de inhoud van de gegevenscellen (<td>-elementen) die in de rijen zijn opgenomen.

Opmerking

Deze oplossing gaat ervan uit dat de <td>-elementen zijn gevuld met platte tekst zonder afstammelingselementen.

JS
const allTables = document.querySelectorAll("table");

for (const table of allTables) {
  const tBody = table.tBodies[0];
  const rows = Array.from(tBody.rows);
  const headerCells = table.tHead.rows[0].cells;

  for (const th of headerCells) {
    const cellIndex = th.cellIndex;

    th.addEventListener("click", () => {
      rows.sort((tr1, tr2) => {
        const tr1Text = tr1.cells[cellIndex].textContent;
        const tr2Text = tr2.cells[cellIndex].textContent;
        return tr1Text.localeCompare(tr2Text);
      });

      tBody.append(...rows);
    });
  }
}
CSS
table {
  border-collapse: collapse;
  border: 2px solid rgb(140 140 140);
  font-family: sans-serif;
  font-size: 0.8rem;
  letter-spacing: 1px;
}

th,
td {
  border: 1px solid rgb(160 160 160);
  padding: 4px 8px;
}

th {
  background-color: #505050;
  color: white;
  cursor: pointer;
}

Resultaat

Resultaat in de browser
Opmerking

Om bruikbaar en toegankelijk te zijn, moet de headercel van elke sorteerbare kolom herkenbaar zijn als een sorteerknop, en moet elke kolom visueel én met het aria-sort-attribuut aangeven of deze momenteel oplopend of aflopend gesorteerd is. Zie de sorteerbare tabelvoorbeeld in de ARIA Authoring Practices Guide voor meer informatie.

Technische samenvatting

Content categories Geen
Toegestane inhoud Nul of meer <td>- en/of <th>-elementen; script-supporting elements (<script> en <template>) zijn ook toegestaan.
Weglaten van tags Begintag is verplicht. Eindtag mag worden weggelaten als het <tr>-element direct wordt gevolgd door een <tr>-element, of als de rij het laatste element is in zijn bovenliggende tabelgroep (<thead>, <tbody> of <tfoot>) element.
Toegestane bovenliggende elementen <table> (alleen als de tabel geen kind- <tbody>-element heeft, en zelfs dan alleen na eventuele <caption>-, <colgroup>- en <thead>-elementen); anders moet het bovenliggende element een <thead>-, <tbody>- of <tfoot>-element zijn.
Impliciete ARIA-rol row
Toegestane ARIA-rollen Alle
DOM-interface HTMLTableRowElement

Zie ook

Verwante elementen