Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

124
Visualizações
How to add active class to clicked element and remove it from others?

I have the javascript written correctly to add and remove an active class from a clicked element, but when I click an element, the active class isn't removed from the sibling.

How do I click on one sibling (making it active) and remove the active class from other siblings?

let navItems = document.querySelectorAll('li');

navItems.forEach(navItem => {
  navItem.addEventListener('click', () => {
    navItem.classList.contains('active') ? navItem.classList.remove('active') : navItem.classList.add('active');
  });
});
ul {
  display: flex;
  max-width: 500px;
  margin: 0 auto;
  justify-content: space-between;
  margin-top: 1em;
}

ul li {
  list-style-type: none;
  padding: 5px 10px;
  cursor: pointer;
}

ul li.active {
  background: darkred;
  color: white;
}
<ul>
  <li class="active">Home</li>
  <li>About</li>
  <li>Products</li>
  <li>Sales</li>
  <li>Contact</li>
</ul>

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Why don't you use event delegation? This way:

menu.onclick = e => {
  var el = e.target;
  if (el.tagName != "LI") return;
  menu.querySelector(".active").removeAttribute("class");
  el.setAttribute("class", "active");
}
ul {
  display: flex;
  max-width: 500px;
  margin: 0 auto;
  justify-content: space-between;
  margin-top: 1em;
}

ul li {
  list-style-type: none;
  padding: 5px 10px;
  cursor: pointer;
}

ul li.active {
  background: darkred;
  color: white;
}
<ul id="menu">
  <li class="active">Home</li>
  <li>About</li>
  <li>Products</li>
  <li>Sales</li>
  <li>Contact</li>
</ul>

about 4 years ago · Juan Pablo Isaza Relatório

0

You can make it easier on yourself by putting a classname on the UL tag so you can reference just those items inside it. Then, in your listener, reference the event argumet (I called it e)

let navItems = document.querySelectorAll('.navigation li');

navItems.forEach(navItem => {
  navItem.addEventListener('click', e => {
    document.querySelector('.navigation li.active').classList.remove('active');
    e.target.classList.add('active');
  });
});
ul {
  display: flex;
  max-width: 500px;
  margin: 0 auto;
  justify-content: space-between;
  margin-top: 1em;
}

ul li {
  list-style-type: none;
  padding: 5px 10px;
  cursor: pointer;
}

ul li.active {
  background: darkred;
  color: white;
}
<ul class='navigation'>
  <li class="active">Home</li>
  <li>About</li>
  <li>Products</li>
  <li>Sales</li>
  <li>Contact</li>
</ul>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda