gpt4 book ai didi

javascript - 单击同级时从导航中删除类

转载 作者:行者123 更新时间:2023-12-03 02:25:20 24 4
gpt4 key购买 nike

我创建了一个导航,通过添加“事件”类来突出显示选择的任何菜单项。如果单击主体,它将从菜单项中删除事件类并重新开始。除非您单击菜单上的同级,否则它会按预期工作。事件类将添加到新单击的菜单项中,但它也保留在旧菜单项上。我编写的代码应该循环遍历所有菜单项,以查看其中是否有任何一个具有“事件”类,删除该类,然后将“事件”类添加到新选择中。它不起作用。

我做错了什么?还有更简单的方法可以做到这一点吗?我需要用普通的 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');

}
})
}

最佳答案

closest() 适用于祖先而不是 sibling 。因此,e.target.closest('.nav-item') 只会在closest() 找到自身或与该选择器匹配的祖先时找到自己。不是任何同级导航元素。

含义

e.target.closest('.nav-item').classList.remove('active')

仅尝试从当前单击的 li 中删除事件的类。

您可能打算在循环中使用 e.target.closest('.nav-items').children 作为访问子 li 的方式,例如

var li = e.target.closest('.nav-items').children[i];
li.classList.remove('active');

但是您实际上并不需要循环,除非您认为最终可能会得到多个事件元素。您可以通过查找最接近的 ul 元素来查找当前事件元素,然后从中查找具有类 activenav-item ,即 css 类选择器 .nav-item.active

var parentUL = e.target.closest('.nav-items');
var current = parentUL.querySelector('.nav-item.active');
current.classList.remove('.active');

关于javascript - 单击同级时从导航中删除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com