Signatur
Beschreibung
Die Eigenschaft length einer DOMRectList gibt an, wie viele DOMRect-Objekte die Liste enthält. Solche Listen erhalten Sie vor allem von Element.getClientRects() und Range.getClientRects(). Beide Methoden liefern für jede Rahmenbox (border box) bzw. für jedes Textfragment ein eigenes Rechteck.
Nützlich ist length vor allem bei Inline-Elementen, die über mehrere Zeilen umbrechen. Ein <span>, der sich über drei Zeilen erstreckt, liefert drei Rechtecke. Mit length können Sie also die Anzahl der Zeilen ermitteln, prüfen, ob ein Element überhaupt dargestellt wird (length === 0 bei display: none oder bei Elementen außerhalb des Dokuments), oder in einer klassischen for-Schleife über die Rechtecke laufen.
Der Wert ist eine nicht negative Ganzzahl und lässt sich nicht verändern: Zuweisungen werden im nicht strikten Modus stillschweigend ignoriert. Die Liste ist eine statische Momentaufnahme. Ändert sich danach das Layout, bleibt length gleich. Für aktuelle Werte müssen Sie getClientRects() erneut aufrufen.
Rückgabewert
DOMRect-Objekte in der Liste. Sie ist 0, wenn keine Rahmenbox erzeugt wird.Beispiele
Zeilenanzahl eines umbrechenden Inline-Elements ermitteln
const span = document.createElement('span');
span.textContent = 'Dies ist ein längerer Text, der in einem schmalen Container über mehrere Zeilen umbricht.';
const box = document.createElement('div');
box.style.width = '150px';
box.append(span);
document.body.append(box);
const rects = span.getClientRects();
console.log(`Der Text belegt ${rects.length} Zeilen.`);
Prüfen, ob ein Element dargestellt wird
const isRendered = (el) => el.getClientRects().length > 0;
const hint = document.createElement('p');
hint.textContent = 'Hinweis';
document.body.append(hint);
console.log(isRendered(hint));
hint.style.display = 'none';
console.log(isRendered(hint));
Mit length über alle Rechtecke einer Textauswahl iterieren
const p = document.createElement('p');
p.textContent = 'Markiere mich bitte über mehrere Zeilen hinweg, damit mehrere Rechtecke entstehen.';
p.style.width = '200px';
document.body.append(p);
const range = document.createRange();
range.selectNodeContents(p);
const rects = range.getClientRects();
for (let i = 0; i < rects.length; i++) {
const { left, top, width, height } = rects[i];
console.log(`#${i}: x=${Math.round(left)}, y=${Math.round(top)}, ${Math.round(width)}×${Math.round(height)}`);
}
// Wichtig · Fallstricke
- Statische Liste:
lengthändert sich nicht, wenn sich das Layout ändert. Rufen Sie nach Größen- oder InhaltsänderungengetClientRects()erneut auf. - Layout erzwingen: Jeder Aufruf von
getClientRects()kann ein synchrones Neuberechnen des Layouts (Reflow) auslösen. Rufen Sie die Methode deshalb in Schleifen oder beiscroll-/resize-Ereignissen nicht unnötig oft auf. - Nicht dargestellte Elemente: Bei
display: none, bei Elementen außerhalb des Dokuments und bei manchen SVG-Konstellationen istlengthgleich0. Beivisibility: hiddenistlengthdagegen größer als 0. - Kein echtes Array:
DOMRectListhat keinmap,filterusw. Verwenden SieArray.from(rects)oder[...rects], denn die Liste ist iterierbar. - Kompatibilität: Wird von allen aktuellen Browsern unterstützt. In älteren Browsern hieß die Schnittstelle teilweise
ClientRectList,lengthverhält sich dort gleich.