admin管理员组文章数量:1410674
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 badges5 Answers
Reset to default 3I 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';
本文标签: Javascript how to add active class to clicked element and hide all othersStack Overflow
版权声明:本文标题:Javascript how to add active class to clicked element and hide all others - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744911918a2631969.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论