Javascript how to add active class to clicked element and hide all others - Stack Overflow

I have a list-item-menu, where when I click on one of them it gets an active class, while I want all ot

I have a list-item-menu, where when I click on one of them it gets an active class, while I want all other list-items to get hidden but I'm not sure how to do that.

Here is my script so far:

const items = document.querySelectorAll('.menu-item');

items.forEach((item) => {
   item.addEventListener('click', (e) => {
      item.classList.toggle('active')

      // HIDE ALL OTHER "item"-elements
  })
});

can someone help me out?

I have a list-item-menu, where when I click on one of them it gets an active class, while I want all other list-items to get hidden but I'm not sure how to do that.

Here is my script so far:

const items = document.querySelectorAll('.menu-item');

items.forEach((item) => {
   item.addEventListener('click', (e) => {
      item.classList.toggle('active')

      // HIDE ALL OTHER "item"-elements
  })
});

can someone help me out?

Share asked May 19, 2021 at 8:16 ST80ST80 3,91317 gold badges72 silver badges145 bronze badges
Add a ment  | 

5 Answers 5

Reset to default 3

I think you can implement that function like this.

 const items = document.querySelectorAll('.menu-item');

items .forEach(item => {
  item.addEventListener("click", function() {   
   items .forEach(a=>{
      a.classList.remove("active");
      a.style.display = 'none'; 
    });
     item.classList.add("active");
     item.style.display = 'block'; 
    
  });  
});

You can use this function for pare index and toggle class.
I used colors for the example:

const items = document.querySelectorAll('.menu-item');

items.forEach((item, idx) => {  
  item.addEventListener('click', () => {   
    ToggleActive(item,idx);
  });
});

function ToggleActive(el,index) {
  el.classList.toggle('active');
  items.forEach((item,idx) => {
    if(idx !== index){
      item.classList.remove("active");
    }
  });
}
.active{
  color:blue;
}
<div class='menu-item'>Menu 1</div>
<div class='menu-item'>Menu 2</div>
<div class='menu-item'>Menu 3</div>
<div class='menu-item'>Menu 4</div>

Try This

const items = document.querySelectorAll(".menu-item");
      items.forEach((item) => {
        item.addEventListener("click", (e) => {
          item.classList.toggle("active");
          let itemsArray = [...items];
          let array = itemsArray.filter((item) => item !== e.target);
          array.forEach((elem) => {
            //   to toggle hidden
            elem.hidden = !elem.hidden;
          });
        });
      });
<button class="menu-item">1</button>
<button class="menu-item">2</button>
<button class="menu-item">3</button>
<button class="menu-item">4</button>
<button class="menu-item">5</button>

You only need to listen for event on the parent element (here the ul) and then you can use closest() to find the element that you need to be active.

const ul = document.querySelector('ul');

ul.addEventListener('click', e => {
  e.preventDefault();
  let li = e.target.closest('li');
  if (li) {
    ul.querySelectorAll('li').forEach(elm => elm.classList.remove('active'));
    li.classList.add('active');
  }
});
li.active a {
  color: red;
}
<ul>
  <li><a href="1">Item 1</a></li>
  <li><a href="2">Item 2</a></li>
  <li><a href="3">Item 3</a></li>
  <li><a href="4">Item 4</a></li>
</ul>

You can use document.getElementsByClassName to do that.

An example of that would look like so;

document.getElementsByClassName('.menu-item')[0].style.visibility = 'hidden';

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744911919a4600603.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信