我试图在ul列表中添加一个CSS类到一个被点击的li元素中,但是我遇到了一个问题,CSS类被添加到多个li元素中,而不是被点击的那个。我想点击一个li,颜色适用于点击的li这是我使用的代码:
const lis = document.querySelectorAll('.li');
lis.forEach((li)=>{
li.addEventListener("click",()=>{
li.classList.add('active')
})
})
ul {
list-style: none;
display: flex;
justify-content: center;
}
.li {
margin: 0 0.5rem;
padding: 0.5rem 0.75rem;
border: 1px solid black;
border-radius: 0.25rem;
cursor: pointer;
}
.li:hover {
background-color: #ccc;
}
.li.active{
color: red;
}
<body>
<ul>
<li class="li">1</li>
<li class="li">3</li>
<li class="li">4</li>
<li class="li">5</li>
<li class="li">6</li>
<li class="li">7</li>
</ul>
</body>
当我点击一个li元素时,“active”类被添加到列表中所有已经点击的li元素中,而不仅仅是被点击的那个。我如何修改这段代码来确保“active”类只被添加到被单击的li元素中,而不添加到列表中的任何其他元素中?
任何帮助或指导将不胜感激。谢谢你,谢谢!
7条答案
按热度按时间bd1hkmkf1#
更新代码并使用target。你必须从以前的li中删除活动类。
下面是完整的代码:
第一行:
它将选择具有活动类的元素,然后从其中删除活动类。我使用?,它将首先检查是否有任何活动元素可用,如果它可用,它将从它中删除活动类。如果它不可用,它不会抛出错误。
第二行:
它将简单地在当前单击的元素上添加活动类。
0g0grzrc2#
将“click”事件注册到单个祖先元素(即包含所有可单击元素的元素(例如,所有
<li>
))。创建一个事件处理程序,它将对特定的元素被点击做出React(例如,在点击任何<li>
时切换".active"
)。这种编程范式称为事件委托。该示例的行为如下所示:
".active"
的<li>
,则删除它,否则添加".active"
。<li>
可以有".active"
。".active"
(如果存在)将被删除。触发已注册事件时调用的函数
示例中有详细注解
webghufk3#
thtygnil4#
如果你的意思是只想激活点击的项目,你可以像这样修改你的js代码。
ql3eal8s5#
根据你最初的问题,你的代码按预期工作。
根据您的评论,如果您想从以前的
li
中删除.active
类,试试这个:ou6hu8tu6#
您可以轻松地删除所选li的类
或者你可以只使用html和css,避免使用JavaScript。
px9o7tmv7#
从当前
li.active
中删除类(如果存在)。这里是一个使用event delegation的解决方案,所以你需要一个处理函数。