javascript - Vanilla Javascript:在列表的每个元素上切换一个类名,以便每次只有项目具有所需的类
问题描述
我有一个导航栏。
首先,只有第一个链接(主页)具有“活动”类。
我想实现以下目标:
当用户单击不同的链接时,活动类别将从存在的任何地方删除,并归因于用户单击的链接。这样一次只有一个链接处于活动状态。
const links = document.querySelectorAll('.navbar ul li a');
links.forEach((link) => {
link.addEventListener('click', () => {
link.classList.toggle('active');
});
});
.active {
background-color: #fc9d03;
}
<div class="navbar">
<ul>
<li><a href="#" class="active">Homepage</a></li>
<li> <a href="#">Blog Entries</a></li>
<li><a href="#">Food Gallery</a></li>
<li> <a href="#">Contact Us</a></li>
</ul>
</div>
解决方案
我稍微编辑了你的片段。
在事件侦听器功能上,您可以通过过滤掉所有链接中点击的链接来停用所有链接。
然后,您可以从这些链接中删除激活类并将其添加到单击的链接中。
const links = document.querySelectorAll('.navbar ul li a');
links.forEach((link) => {
link.addEventListener('click', () => {
const notClickedLinks = Array.from(links).filter((notClickedLink) => {
return notClickedLink !== link;
});
notClickedLinks.forEach((notClickedLink) => {
notClickedLink.classList.remove('active');
});
link.classList.add('active');
});
});
.active {
background-color: #fc9d03;
}
<div class="navbar">
<ul>
<li><a href="#" class="active">Homepage</a></li>
<li><a href="#">Blog Entries</a></li>
<li><a href="#">Food Gallery</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
</div>
推荐阅读
- json - 使用 rfc4627 从 erlang 中的 json 数组中获取特定数据
- android - 将应用图像文件夹设置为“从图库中选择图像”等事件的默认文件夹
- ffmpeg - NVIDIA 编解码器压缩时间
- visual-studio - 如何在 Visual Studio 市场中通过命令行更新已发布的扩展?
- android - 无法在 WebView 中显示来自外部网站的图像
- perforce - Perforce:想要多行描述
- dart - 如何打开文件进行写入?
- html - 如何以 100% 宽度居中表格?
- visual-studio - 在 Visual Studio 2019 中删除菜单下方的空行
- php - 禁用多个按钮点击有效,但不更新我的数据