Um sicherzustellen, dass immer nur ein <details>
-Element geöffnet ist, wenn der Benutzer ein anderes <details>
-Element anklickt, kannst du ein JavaScript hinzufügen, das alle anderen <details>
-Elemente schließt, sobald eines geöffnet wird.
Hier ist ein Beispiel:
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Details Toggle</title>
<style>
details {
margin-bottom: 10px;
}
</style>
</head>
<body>
<details>
<summary>Item 1</summary>
<p>Details for Item 1</p>
</details>
<details>
<summary>Item 2</summary>
<p>Details for Item 2</p>
</details>
<details>
<summary>Item 3</summary>
<p>Details for Item 3</p>
</details>
<script src="script.js"></script>
</body>
</html>
JavaScript
document.addEventListener('DOMContentLoaded', () => {
// Alle <details>-Elemente holen
const detailsElements = document.querySelectorAll('details');
detailsElements.forEach((details) => {
details.addEventListener('toggle', () => {
if (details.open) {
// Alle anderen Details-Elemente schließen
detailsElements.forEach((otherDetails) => {
if (otherDetails !== details) {
otherDetails.open = false;
}
});
}
});
});
});
Erklärung
- Event Listener hinzufügen:
- Jedes
<details>
-Element bekommt einentoggle
-Event-Listener. - Der
toggle
-Event wird ausgelöst, wenn ein<details>
-Element geöffnet oder geschlossen wird.
- Jedes
- Prüfen, ob
open
ist:- Wenn ein
<details>
-Element geöffnet wird (d.h.details.open === true
), schließen wir alle anderen<details>
-Elemente.
- Wenn ein
- Alle anderen schließen:
- Ein
forEach
-Loop iteriert über alle<details>
-Elemente und schließt diejenigen, die nicht gerade geöffnet wurden.
- Ein
Ergebnis
- Öffnest du ein
<details>
-Element, schließen sich alle anderen automatisch. - Du kannst beliebig viele
<details>
-Elemente im HTML verwenden, und das Skript funktioniert ohne zusätzliche Anpassungen.
Probiere es aus! 😊