[英]Pure JavaScript: toggle links active
我的代码仅适用于第一个“ a”孩子。 不在其余的“一个”孩子上工作。 为什么?
互联网上有一些解决方案,但在jQuery中。 我更喜欢纯JavaScript。
document.querySelector('a').addEventListener('click', active); function active() { document.querySelector('a').classList.remove('active'); this.classList.add('active'); }
.topnav { overflow: hidden; background-color: grey; } .topnav a { float: left; display: block; color: #f2f2f2; text-align: center; padding: 10px; text-decoration: none; } .topnav a:hover { background-color: #ddd; color: black; } .topnav a.active { background-color: red; color: white; }
<div class="topnav"> <a class="active" href="#home">Home</a> <a href="#news">News</a> <a href="#contact">Contact</a> <a href="#about">About</a> </div>
添加ID而不是类; 删除每次单击的“活动”类,然后将“活动”类添加到单击的锚标记中;
document.getElementById('news').onclick = active; document.getElementById('home').onclick = active; document.getElementById('contact').onclick = active; document.getElementById('about').onclick = active; //addEventListener('click', active); function active() { document.querySelector('a.active').classList.remove('active'); this.classList.add('active'); }
.topnav { overflow: hidden; background-color: grey; } .topnav a { float: left; display: block; color: #f2f2f2; text-align: center; padding: 10px; text-decoration: none; } .topnav a:hover { background-color: #ddd; color: black; } .topnav a.active { background-color: red; color: white; }
<div class="topnav"> <a class="active" id="home" href="#home">Home</a> <a href="#news" id="news">News</a> <a href="#contact" id="contact">Contact</a> <a href="#about" id="about">About</a> </div>
您可以将事件委托与querySelectorAll
使用,以编写小巧的解决方案,如下所示:
document.querySelector('.topnav').addEventListener('click', active); function active(e) { document.querySelectorAll('.topnav > a').forEach(function(a){ a.classList.remove('active'); }) e.target.classList.add('active'); }
.topnav { overflow: hidden; background-color: grey; } .topnav a { float: left; display: block; color: #f2f2f2; text-align: center; padding: 10px; text-decoration: none; } .topnav a:hover { background-color: #ddd; color: black; } .topnav a.active { background-color: red; color: white; }
<div class="topnav"> <a class="active" href="#home">Home</a> <a href="#news">News</a> <a href="#contact">Contact</a> <a href="#about">About</a> </div>
您需要querySelectorAll和一些循环:
const menuItems = document.querySelectorAll('a');
menuItems.forEach(el =>
el.addEventListener('click', active)
);
function active() {
menuItems.forEach(el =>
el.classList.remove('active')
);
this.classList.add('active');
}
您应该使用document.querySelectorAll('a')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.