javascript - 纯Javascript | 将类添加到
问题描述
我正在尝试为<li>
单击事件中的元素添加类。如果我单击第一个元素,它应该获取类“current-tab”,其他<li>
元素不应包含该类等。这是一些 HTML 代码:
<nav class="interest-nav">
<ul id="interest-ul">
<li><a href="#box1">Fashion</a></li>
<li><a href="#box2">Movies</a></li>
<li><a href="#box3">TV</a></li>
</ul>
</nav>
和Javascript代码:
var navUl = document.getElementById('interest-ul').getElementsByTagName('li');
for (var y = 0; y < navUl.length; y++) {
navUl[y].addEventListener('click', checkLi);
}
function checkLi() {
if (navUl.className === '') {
navUl.className = 'current-tab';
} else {
navUl.className = '';
}
}
感谢您的关注和帮助!
解决方案
您正在尝试在数组上设置类。您可以通过将事件侦听器添加到列表本身来简化此脚本,然后使用事件目标。
var navUl = document.getElementById( 'interest-ul' );
navUl.addEventListener( 'click', checkLi );
function checkLi( event ) {
// Just for testing... remove the following line:
console.log( 'clicked on', event.target.tagName );
// Only apply our actions if we really clicked on the link.
if ( event.target.tagName === 'A' ) {
navUl.querySelectorAll( 'li' ).forEach( el => el.classList.remove( 'current-tab' ) );
event.target.parentNode.classList.add( 'current-tab' );
}
}
.current-tab {
font-weight: bold;
}
<nav class="interest-nav">
<ul id="interest-ul">
<li><a href="#box1">Fashion</a></li>
<li><a href="#box2">Movies</a></li>
<li><a href="#box3">TV</a></li>
</ul>
</nav>
推荐阅读
- reactjs - 为什么我只从本地主机获得公共 API 的 CORS 错误
- php - 如何在 laravel 中通过急切加载从 3 个表中获取数据
- angular - Angular:在没有@Injectable 装饰器的情况下注入类
- powershell - 运行任何 powershell 脚本时出现 Set-ExecutionPolicy 错误
- python - 如何在矩阵乘法 Ax=b 中找到 A,其中 A 的一些值已知,A 是随机的
- python - 如何使用变量从表中选择
- c++ - 带有 cuda GpuMat::create() 调用的 Opencv 导致访问冲突
- python - 将来自多个 subreddits 的 PRAW 结果附加到一个数据帧
- java - 终端操作中基于谓词的短路Java Stream管道
- android - 如何将 Retrofit 对象直接注入到存储库类中?