Start · Sprachen · JavaScript · Referenz · HTMLTableCellElement.scope

HTMLTableCellElement.scope

Eigenschaft

Liest oder setzt das <code>scope</code>-Attribut einer <code>&lt;th&gt;</code>-Zelle, das festlegt, für welche Zellen diese Kopfzelle gilt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLTableCellElement.scope

Beschreibung

Die Eigenschaft scope spiegelt das HTML-Attribut scope einer Tabellenzelle wider. Sie legt fest, auf welche Datenzellen sich eine Kopfzelle (<th>) bezieht: auf die Zeile ("row"), die Spalte ("col"), eine Zeilengruppe ("rowgroup") oder eine Spaltengruppe ("colgroup").

Wichtig ist das vor allem für die Barrierefreiheit. Screenreader lesen anhand dieser Zuordnung beim Navigieren durch eine Tabelle die passende Überschrift vor. Gerade bei Tabellen, in denen Kopfzellen sowohl oben als auch am linken Rand stehen, sorgt ein ausdrückliches scope für eine eindeutige Zuordnung.

Die Eigenschaft ist ein aufgezählter Wert (enumerated attribute). Beim Lesen erhältst du immer einen der vier erlaubten Werte in Kleinbuchstaben oder einen leeren String. Das gilt auch, wenn das Attribut fehlt, ungültig ist oder anders geschrieben wurde. Beim Schreiben wird der Wert unverändert als Attribut übernommen.

Laut Spezifikation hat scope nur bei <th>-Elementen eine Bedeutung. Bei <td> ist das Attribut in HTML5 veraltet und wird ignoriert.

Parameter

Name Typ Default Beschreibung
$wert "row" | "col" | "rowgroup" | "colgroup" | "" "" Neuer Wert beim Setzen. Gilt die Zelle für die Zeile, die Spalte, eine Zeilengruppe (<tbody>, <thead>, <tfoot>) oder eine Spaltengruppe (<colgroup>)? Ein leerer String bedeutet den automatischen Zustand.

Rückgabewert

Typ
string
Beschreibung
Einer der Werte "row", "col", "rowgroup" oder "colgroup". Fehlt das Attribut oder ist es ungültig, kommt "" zurück. Der Browser bestimmt die Zuordnung dann selbst (auto).

Beispiele

scope einer Kopfzelle auslesen

// HTML: <table><tr><th id="name" scope="COL">Name</th></tr></table>
const th = document.getElementById('name');
console.log(th.scope);
console.log(th.getAttribute('scope'));
col COL

Fehlende scope-Attribute automatisch ergänzen

// Kopfzellen im <thead> gelten für Spalten, <th> im <tbody> für Zeilen
const table = document.querySelector('table');

table.querySelectorAll('thead th').forEach((th) => {
  if (!th.scope) th.scope = 'col';
});

table.querySelectorAll('tbody th').forEach((th) => {
  if (!th.scope) th.scope = 'row';
});

console.log([...table.querySelectorAll('th')].map((th) => th.scope));
["col", "col", "col", "row", "row"]

Barrierefreie Tabelle dynamisch erzeugen

const daten = [
  { stadt: 'Berlin', einwohner: 3_850_000 },
  { stadt: 'Hamburg', einwohner: 1_910_000 }
];

const table = document.createElement('table');
const kopf = table.createTHead().insertRow();

['Stadt', 'Einwohner'].forEach((text) => {
  const th = document.createElement('th');
  th.textContent = text;
  th.scope = 'col';
  kopf.append(th);
});

const body = table.createTBody();
for (const { stadt, einwohner } of daten) {
  const row = body.insertRow();
  const th = document.createElement('th');
  th.textContent = stadt;
  th.scope = 'row'; // Zeilenkopf
  row.append(th);
  row.insertCell().textContent = einwohner.toLocaleString('de-DE');
}

document.body.append(table);
console.log(table.querySelector('tbody th').outerHTML);
<th scope="row">Berlin</th>

Ungültige Werte

const th = document.createElement('th');
th.scope = 'spalte';
console.log(JSON.stringify(th.scope));
console.log(th.getAttribute('scope'));
"" spalte

// Wichtig · Fallstricke

  • Ungültige Werte: Setzt du einen ungültigen Wert wie "spalte", landet er so im Attribut. Die Eigenschaft liefert beim Lesen aber "". Wenn du den tatsächlichen Attributinhalt brauchst, nimm getAttribute('scope').
  • Groß- und Kleinschreibung: Beim Lesen erhältst du immer Kleinbuchstaben. Aus scope="ROW" wird also "row".
  • Nur für <th>: Obwohl die Eigenschaft auch bei <td> existiert, ist scope dort veraltet. Screenreader werten es nicht zuverlässig aus.
  • Komplexe Tabellen: Bei mehrstufigen oder unregelmäßigen Kopfzellen reicht scope oft nicht aus. Ordne Datenzellen dann ausdrücklich über headers und id zu.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Das Verhalten beim Lesen ungültiger Werte (leerer String) ist in aktuellen Browsern einheitlich. Sehr alte Versionen gaben teils den Rohwert zurück.