Start · Sprachen · JavaScript · Referenz · HTMLTableElement.createCaption()

HTMLTableElement.createCaption()

Methode

Gibt das <code>&lt;caption&gt;</code>-Element einer Tabelle zurück. Gibt es noch keins, wird es erzeugt und als erstes Kind der Tabelle eingefügt.

seit JavaScript Baseline: alle Browser (DOM Level 1) Kategorie: webapi

Signatur

HTMLTableElement.prototype.createCaption()

Beschreibung

Die Methode createCaption() gehört zur Schnittstelle HTMLTableElement. Sie liefert die Tabellenüberschrift (<caption>) einer Tabelle. Hat die Tabelle schon ein <caption>-Element, bekommst du genau dieses zurück, und es wird kein zweites angelegt. Andernfalls wird ein neues, leeres <caption> erzeugt, als erstes Kind der Tabelle eingefügt und zurückgegeben.

Das ist praktisch, wenn du Tabellen per Skript erzeugst oder änderst und eine barrierefreie Beschriftung sicherstellen willst. Screenreader lesen die <caption> als Namen der Tabelle vor. Weil die Methode idempotent ist, kannst du sie beliebig oft aufrufen, ohne vorher prüfen zu müssen, ob schon eine Beschriftung da ist.

Laut HTML-Standard muss <caption> das erste Kind von <table> sein. Die Methode hält sich automatisch daran. Mit createElement('caption') und append() würdest du das Element dagegen leicht an die falsche Stelle setzen. Zum Entfernen gibt es das Gegenstück deleteCaption(), lesend und schreibend zugreifen kannst du auch über die Eigenschaft table.caption.

Rückgabewert

Typ
HTMLTableCaptionElement
Beschreibung
Das vorhandene oder neu erzeugte <caption>-Element der Tabelle.

Beispiele

Beschriftung zu einer vorhandenen Tabelle hinzufügen

// HTML: <table id="umsatz"><tr><td>Q1</td><td>12.000 €</td></tr></table>
const table = document.querySelector('#umsatz');
const caption = table.createCaption();
caption.textContent = 'Umsatz 2024 nach Quartal';

console.log(table.firstElementChild === caption);
console.log(caption.tagName);
true CAPTION

Mehrfacher Aufruf liefert dasselbe Element

const table = document.createElement('table');
const a = table.createCaption();
const b = table.createCaption();

console.log(a === b);
console.log(table.querySelectorAll('caption').length);
true 1

Tabelle komplett per Skript aufbauen

const renderTable = (titel, zeilen) => {
  const table = document.createElement('table');
  // Reihenfolge egal: caption landet immer an erster Stelle
  const tbody = table.createTBody();
  for (const [name, wert] of zeilen) {
    const row = tbody.insertRow();
    row.insertCell().textContent = name;
    row.insertCell().textContent = wert;
  }
  table.createCaption().textContent = titel;
  return table;
};

const t = renderTable('Lagerbestand', [['Schrauben', 540], ['Muttern', 320]]);
document.body.append(t);
console.log(t.firstElementChild.outerHTML);
<caption>Lagerbestand</caption>

Beschriftung umschalten mit deleteCaption()

const table = document.querySelector('table');
const toggleCaption = (text) => {
  if (table.caption) {
    table.deleteCaption();
  } else {
    table.createCaption().textContent = text;
  }
};

toggleCaption('Messwerte');
console.log(table.caption?.textContent);
toggleCaption();
console.log(table.caption);
Messwerte null

// Wichtig · Fallstricke

  • Keine Duplikate: Ist bereits ein <caption> vorhanden, gibt die Methode dieses zurück und legt kein neues an. Vorhandener Text bleibt erhalten. Wenn du den Text neu setzen willst, überschreibe textContent ausdrücklich.
  • Sicherheit: Setze Beschriftungstexte aus Benutzereingaben über textContent und nicht über innerHTML, sonst riskierst du XSS.
  • Nur Tabellen: Die Methode gibt es nur auf HTMLTableElement. Auf <tbody> oder anderen Elementen fehlt sie, dort erhältst du einen TypeError.
  • Gestaltung: Die Position der Beschriftung steuerst du per CSS mit caption-side. Das veraltete Attribut align solltest du nicht mehr verwenden.
  • Kompatibilität: Wird seit DOM Level 1 von allen Browsern unterstützt. In Node.js steht die Methode nur mit einer DOM-Implementierung wie jsdom zur Verfügung.