【发布时间】:2018-02-25 19:11:09
【问题描述】:
我创建了一个导航,通过添加一个“活动”类来突出显示选择的任何菜单项。如果单击正文,它将从菜单项中删除活动类并重新开始。它按预期工作,除非您单击菜单上的同级。活动类被添加到新单击的菜单项中,但它也保留在旧菜单项上。我编写的代码假设循环遍历所有菜单项以查看其中是否有任何一个具有“活动”类,删除该类,然后将“活动”类添加到新选择中。它不工作。
我做错了什么?还有没有更简单的方法可以做到这一点?我需要用 vanilla Javascript 解决这个问题。我不能使用 jQuery。
// html
<ul class="nav-items">
<li class="nav-item"></li>
<li class="nav-item"></li>
<li class="nav-item"></li>
<li class="nav-item"></li>
<li class="nav-item"></li>
<li class="nav-item"></li>
<li class="nav-item"></li>
</ul>
// js
if (navItems) {
navItems.addEventListener("click", function(e) {
var background = document.querySelector('.background');
var callout = document.querySelectorAll('.background, .nav-close')
console.log(e.target.closest('.nav-item'));
if (background.style.display !== "block") {
background.style.display = "block";
for( let i = 0; i < e.target.closest('.nav-items').children.length; i++ ) {
console.log(e.target.closest('.nav-items'));
e.target.closest('.nav-item').classList.remove('active');
}
e.target.closest('.nav-item').classList.add('active');
if (background.style.display === "block") {
callout.forEach(function(elem) {
elem.addEventListener("click", function(event) {
background.style.display = "none";
console.log('target', e.target);
e.target.closest('.nav-item').classList.remove('active');
});
});
}
} else {
background.style.display = "none";
e.target.closest('.nav-item').classList.remove('active');
}
})
}
【问题讨论】:
标签: javascript class if-statement navigation