有一个活动/切换点击事件,点击时忽略具有相同 CSS Class 的同级元素

Have An Active / Toggle Click Event That Ignores Sibling Elements With The Same CSS Class When Clicked

我在页面上有一些元素,我想要它,所以当我单击其中一个时,一个特定的子元素被删除,当重新单击该元素时,子元素又回来了。

我通常会通过单击事件来执行此操作,该事件会添加一个“.active”CSS class,可以根据变量当前显示的是真还是假来添加和删除if/else 声明。

这次的问题是因为我有多个元素我不能真正使用“.active”class 因为如果有多个元素 'active' 它会删除或重新添加子元素不同父元素内的元素,而不是仅被单击的元素。

在我想要的示例代码中,当我单击一个红色框时,黄色框仅在该框中消失,当我重新单击该特定父(红色)框时,子元素仅重新出现在该特定父框中如果点击了多个红框。

因为这会影响相当多的元素,所以我不能真正添加​​ ID 和编写单独的函数。

代码笔:https://codepen.io/emilychews/pen/MWJYMEY

var boxOuter = document.querySelectorAll(".box-outer"),
    boxInner = document.querySelectorAll(".box-inner");

if (boxOuter) {
  boxOuter.forEach(function (item) {
    item.addEventListener("click", function () {
      // code
    });
  });
}
body {
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 120vh;
}

.box-outer {
  position: relative;
  width: 10rem;
  height: 5rem;
  background: red;
  margin: 1rem;
  cursor: pointer;
}

.box-inner {
  width: 1rem;
  height: 1rem;
  background: yellow;
  position: absolute;
  bottom: 0.5rem;
  right: 0.5rem;
}
<main class="main-wrapper">
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
</main>

您可以 togglebox-outer 上添加 class onclick,在 CSS 中,如果 box-outer 有 [= active 的 44=] 然后隐藏 box-inner.


Javascript:

item.classList.toggle("active");

CSS:

.box-outer.active .box-inner {
  opacity: 0;
}



var boxOuter = document.querySelectorAll(".box-outer"),
  boxInner = document.querySelectorAll(".box-inner");

if (boxOuter) {
  boxOuter.forEach(function(item) {
    item.addEventListener("click", function() {
      item.classList.toggle("active");
    });
  });
}
body {
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 120vh;
}

.box-outer {
  position: relative;
  width: 10rem;
  height: 5rem;
  background: red;
  margin: 1rem;
  cursor: pointer;
}

.box-inner {
  width: 1rem;
  height: 1rem;
  background: yellow;
  position: absolute;
  bottom: 0.5rem;
  right: 0.5rem;
}

.box-outer.active .box-inner {
  opacity: 0;
}
<main class="main-wrapper">
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
  <div class="box-outer">
    <div class="box-inner"></div>
  </div>
</main>




Check it in action on codepen