Signatur
Beschreibung
Die Eigenschaft open des Interfaces HTMLDetailsElement ist ein boolescher Wert. Sie spiegelt das HTML-Attribut open des Elements <details> wider. Ist sie true, sieht der Benutzer den Inhalt des Elements, also alles außer dem <summary>. Bei false ist nur die Zusammenfassung zu sehen.
Die Eigenschaft lässt sich lesen und schreiben. Wer details.open = true setzt, fügt das Attribut open hinzu. Bei false wird es entfernt. Umgekehrt ändert sich open auch dann, wenn der Benutzer auf das <summary> klickt. Jede Änderung, ob per Skript oder durch den Benutzer, löst das Ereignis toggle aus.
Typische Anwendungen sind „Alle aufklappen/zuklappen“-Schaltflächen in FAQ-Listen, das Speichern des Zustands (z. B. in localStorage) und das automatische Öffnen eines Abschnitts, wenn der Anker in der URL auf ihn zeigt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | boolean | false | Beim Setzen: true öffnet das Element, false schließt es. Andere Werte werden in einen booleschen Wert umgewandelt (truthy/falsy). |
Beispiele
Zustand lesen und umschalten
// <details id="info"><summary>Mehr</summary><p>Details…</p></details>
const details = document.querySelector('#info');
console.log(details.open); // false
details.open = !details.open;
console.log(details.open, details.hasAttribute('open'));
FAQ: Alle auf- bzw. zuklappen
const toggleAll = (open) => {
document.querySelectorAll('.faq details').forEach((d) => {
d.open = open;
});
};
document.querySelector('#expand').addEventListener('click', () => toggleAll(true));
document.querySelector('#collapse').addEventListener('click', () => toggleAll(false));
Zustand in localStorage speichern
const details = document.querySelector('#settings');
const key = 'settings-open';
// Gespeicherten Zustand wiederherstellen
details.open = localStorage.getItem(key) === 'true';
// Änderungen (Klick oder Skript) speichern
details.addEventListener('toggle', () => {
localStorage.setItem(key, String(details.open));
console.log(`Abschnitt ist jetzt ${details.open ? 'offen' : 'geschlossen'}`);
});
Abschnitt per URL-Anker öffnen
const openFromHash = () => {
const target = location.hash && document.querySelector(location.hash);
const details = target?.closest('details');
if (details) {
details.open = true;
target.scrollIntoView({ behavior: 'smooth' });
}
};
window.addEventListener('hashchange', openFromHash);
openFromHash();
// Wichtig · Fallstricke
- Attribut vs. Eigenschaft: Das HTML-Attribut
openist ein boolesches Attribut. Schonopen="false"öffnet das Element, denn es zählt nur, ob das Attribut vorhanden ist. Im Skript sollte man deshalbdetails.open = falseoderremoveAttribute('open')verwenden, nichtsetAttribute('open', 'false'). toggleist asynchron: Das Ereignis wird nachträglich ausgelöst und hat keinecancelable-Eigenschaft. Mehrere schnelle Änderungen hintereinander können zu einem einzigen Ereignis zusammengefasst werden. Um das Öffnen zu verhindern, muss manpreventDefault()imclick-Handler des<summary>aufrufen.- Exklusive Akkordeons: Haben mehrere
<details>dasselbename-Attribut, kann immer nur eines offen sein. Wird ein weiteres peropen = truegeöffnet, schließen sich die anderen automatisch. Das wird in neueren Browsern unterstützt (Chrome 120+, Safari 17.2+, Firefox 130+). - Browser-Kompatibilität:
<details>undopenfunktionieren in allen modernen Browsern. Nur der Internet Explorer und der alte Edge (EdgeHTML) unterstützen sie nicht. - Suche im Browser: In Chromium-Browsern öffnet die Seitensuche (Strg+F) geschlossene
<details>-Elemente automatisch, wenn sie einen Treffer enthalten. Dabei ändert sich auchopen.