Here is my code.
<details> <summary>1</summary> Demo 1 </details> <details> <summary>2</summary> Demo 2 </details> <details> <summary>3</summary> Demo 3 </details>
What I want to do is — if the details of any single <details> tag is open and I open/view another <details> tag, then the earlier one should close/hide/minimize.
How can this be achieved?
I’m aware the <details> tag is not supported in IE or Edge.
Advertisement
Answer
Another approach, slightly shorter, slightly more efficient, without dependencies, and without onclick attributes in the HTML.
// Fetch all the details element.
const details = document.querySelectorAll("details");
// Add the onclick listeners.
details.forEach((targetDetail) => {
targetDetail.addEventListener("click", () => {
// Close all the details that are not targetDetail.
details.forEach((detail) => {
if (detail !== targetDetail) {
detail.removeAttribute("open");
}
});
});
});<details> <summary>1</summary>Demo 1 </details> <details> <summary>2</summary>Demo 2 </details> <details> <summary>3</summary>Demo 3 </details>