单击事件侦听器始终隐藏除第一个元素之外的所有元素

问题描述 投票:0回答:1

这是我为个人使用而构建的一个简单网页。目标是使每个部分可点击:被点击的部分将使用尚未添加的动画代码展开,而其他元素将被隐藏。单击同一元素将使其返回到原始大小,并且其他元素再次可见。但是,当前代码始终会导致第一个

.item
元素保留并隐藏其他元素,无论单击哪个元素。

let isExpanded = false;
const items = document.querySelectorAll(".item");

items.forEach(e => {
  e.addEventListener("click", event => {
    if (isExpanded === false) {
      items.forEach(f => {
        console.log(f.dataset.index);
        console.log(event.target.closest("[data-index]").dataset.index);
        if (f.dataset.index !== event.target.closest("[data-index]").dataset.index) {
          f.style.display = "none";
        }
      });
      isExpanded = true;
    } else {
      items.forEach(g => {
        g.style.display = "inline-block";
      });
      isExpanded = false;
    }
  })
});
* {
  font-family: Verdana, Geneva, Tahoma, sans-serif;
}

body {
  background-color: #0066ff;
}

#title {
  color: white;
}

#list {
  width: 90%;
  margin: auto;
}

.item {
  display: inline-block;
  width: 20%;
  margin: 20px;
  padding: 0 10px;
  border: solid 7px blue;
  border-radius: 3px;
  background-color: white;
}
<h1 id="title">
  「今週の英語フレーズ」履歴
</h1>
<div id="list">
  <div class="item" data-index="1">
    <h2>10/10/2024</h2>
    <p>フレーズ:How are you?</p>
    <p>和訳:お元気ですか?</p>
    <p>動画:</p>
  </div>
  <div class="item" data-index="2">
    <h2>10/10/2024</h2>
    <p>フレーズ:How are you?</p>
    <p>和訳:お元気ですか?</p>
    <p>動画:</p>
  </div>
  <div class="item" data-index="3">
    <h2>10/10/2024</h2>
    <p>フレーズ:How are you?</p>
    <p>和訳:お元気ですか?</p>
    <p>動画:</p>
  </div>
  <div class="item" data-index="4">
    <h2>10/10/2024</h2>
    <p>フレーズ:How are you?</p>
    <p>和訳:お元気ですか?</p>
    <p>動画:</p>
  </div>
</div>

javascript html css dataset
1个回答
0
投票

代码运行良好,只是您将所有 div 设置为相同,因此您无法识别哪个 div 可见,只需更改所有 4 个潜水的日期即可查看代码是否运行正常!

© www.soinside.com 2019 - 2024. All rights reserved.