有没有办法让sibling non-active div?

Is there a way to sibling non-active div?

我想获取所有没有 "active" class 的元素。 这是我的脚本:

HTML:

<nav class="nav">
        <li>
          <a href="#Home"><i class="fas fa-home btn active"></i></a>
        </li>
        <li>
          <a href="#About"><i class="fas fa-user-astronaut btn"></i></a>
        </li>
        <li>
          <a href="#Contact"><i class="fas fa-file-contract btn"></i></a>
        </li>
      </nav>

Javascript:

var btn = document.querySelectorAll(".btn");
for (let i = 0; i < btn.length; i++) {
  btn[i].addEventListener("click", () => {
    var elements = document.getElementsByClassName("active");
    if (btn.length > 0) {
      elements[0].className = elements[0].className.replace("active", "");
    }
    btn[i].className += " active";
  });
}

我想获取所有没有 "active" class 的元素。

您可以像这样使用:not(.active)

var nonActive = document.querySelectorAll(".btn:not(.active)");

您可以在 a 元素中使用 active class 而不是 i。 我认为您可以通过以下方式实现您的目标:

var btn = document.querySelectorAll("a");
Array.from(btn).forEach(function(el){
  el.addEventListener("click", () => {
    Array.from(btn).forEach(b => b.classList.remove('active'));
    el.classList.add('active');
  });
});
li{
 list-style-type: none;
}
.active{
  color: green;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src='https://kit.fontawesome.com/a076d05399.js'></script>
<nav class="nav">
  <li>
    <a href="#Home" class="active"><i class="fas fa-home btn"></i>Home</a>
  </li>
  <li>
    <a href="#User"><i class="fas fa-user-astronaut btn"></i>User</a>
  </li>
  <li>
    <a href="#Contact"><i class="fas fa-file-contract btn"></i>Contact</a>
  </li>
</nav>