Signatur
Beschreibung
HTMLUListElement ist die DOM-Schnittstelle für ungeordnete Listen, also <ul>-Elemente. Jedes <ul> im Dokument und jedes mit document.createElement("ul") erzeugte Element ist eine Instanz davon. Die Schnittstelle erbt alle Eigenschaften und Methoden von HTMLElement, Element, Node und EventTarget.
Eigene Eigenschaften hat sie nur zwei, und beide sind veraltet:
compact(boolean): Hinweis, dass die Liste kompakt dargestellt werden soll. Gibt das HTML-Attributcompactwieder.type(string): Art des Aufzählungszeichens, z. B."disc","circle"oder"square". Gibt das HTML-Attributtypewieder.
In der Praxis nutzt man HTMLUListElement vor allem, um Listen dynamisch aufzubauen, Einträge (<li>) hinzuzufügen, zu sortieren oder zu entfernen, oder um mit instanceof HTMLUListElement den Elementtyp zu prüfen. Für Aussehen und Aufzählungszeichen ist CSS zuständig (list-style-type, padding, margin), nicht die veralteten Eigenschaften.
Die Schnittstelle hat keinen eigenen Konstruktor, den man aufrufen könnte. Instanzen entstehen über document.createElement("ul") oder beim Parsen von HTML.
Rückgabewert
<ul>-Element. Man erhält es z. B. über document.createElement("ul") oder document.querySelector("ul").Beispiele
Liste dynamisch aus Daten erzeugen
const aufgaben = ['Einkaufen', 'Code-Review', 'Sport'];
const liste = document.createElement('ul');
liste.className = 'aufgaben';
for (const text of aufgaben) {
const li = document.createElement('li');
li.textContent = text; // sicher: kein innerHTML
liste.append(li);
}
document.body.append(liste);
console.log(liste instanceof HTMLUListElement, liste.children.length);
Typprüfung und Einträge auslesen
const el = document.querySelector('#navigation');
if (el instanceof HTMLUListElement) {
const eintraege = [...el.querySelectorAll(':scope > li')]
.map((li) => li.textContent.trim());
console.log(eintraege);
} else {
console.warn('#navigation ist keine ungeordnete Liste');
}
Einträge alphabetisch sortieren
const sortiereListe = (ul) => {
const items = [...ul.children];
items.sort((a, b) => a.textContent.localeCompare(b.textContent, 'de'));
ul.replaceChildren(...items); // verschiebt die vorhandenen Knoten
};
const ul = document.querySelector('ul.aufgaben');
sortiereListe(ul);
console.log([...ul.children].map((li) => li.textContent));
Aufzählungszeichen per CSS statt über das veraltete type
const ul = document.querySelector('ul');
// Veraltet, nicht empfohlen:
// ul.type = 'square';
// Modern:
ul.style.listStyleType = 'square';
console.log(getComputedStyle(ul).listStyleType);
// Wichtig · Fallstricke
- Veraltete Eigenschaften:
compactundtypesind veraltet. Die Browser unterstützen sie nur noch aus Kompatibilitätsgründen. Nutze stattdessen CSS (list-style-type,line-height,padding). - Kein direkter Konstruktor:
new HTMLUListElement()wirft einenTypeError(„Illegal constructor“). Verwendedocument.createElement("ul"). - Gültige Kindelemente: Direkte Kinder sollten nur
<li>,<script>oder<template>sein. Andere Elemente erzeugen ungültiges HTML und können Screenreader stören. - Sicherheit: Befülle Listen mit
textContentoderappend(). Wenn Nutzerdaten perinnerHTMLeingefügt werden, entsteht eine XSS-Lücke. - Barrierefreiheit: Mit
list-style: noneentfernt Safari/VoiceOver die Listen-Semantik. Setze in diesem Fallrole="list". - Performance: Bei vielen Einträgen die Knoten zuerst in einem
DocumentFragmentsammeln oderappend(...items)in einem Aufruf nutzen, damit das Layout nicht mehrfach neu berechnet wird. - Die Schnittstelle wird von allen Browsern unterstützt (Baseline).