javascript - 打开特定 <details> 标签后自动关闭所有其他 <details> 标签

标签 javascript html details-tag summary-tag

这是我的代码。

<details>
  <summary>1</summary>
  Demo 1
</details>

<details>
  <summary>2</summary>
  Demo 2
</details>

<details>
  <summary>3</summary>
  Demo 3
</details>

我想做的是——如果任何一个<details>的细节标签已打开,我打开/查看另一个 <details>标签,那么较早的标签应该关闭/隐藏/最小化。

如何实现?

我知道 <details> IE 或 Edge 不支持标签。

最佳答案

另一种方法,稍微短一点,效率稍微高一点,without dependencies ,并且在 HTML 中没有 onclick 属性。

// 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>

关于javascript - 打开特定 <details> 标签后自动关闭所有其他 <details> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751345/

相关文章:

html - 选择第一个 DIV 以删除其双边框

html - 旧版移动浏览器中的媒体查询支持很粗略,我该怎么办?

html - 如何在打开其他标签或在标签外单击时关闭详细信息标签

html - 从 Chrome 中打开的 <details> 元素中删除蓝色边框?

javascript - p5.j​​s 上每个点都有经典箭头的静态矢量场

javascript - 如何使用 bolt 协议(protocol)(javascript)将对象数组(批量插入)插入到 neo4j 中

javascript - 如何删除表中的行?

javascript - 只有内容 div 可滚动的侧边栏布局

javascript - 同步 ajax 调用时未执行先前的语句