javascript - 如何只允许一个具有特定类的元素
问题描述
我有几个可以onclick
触发功能的 div。我想让它在单击时单击刚刚单击的 div 具有 class .selected
。然后我希望它是当您单击另一个元素时,.selected
该类将从另一个元素中删除,然后应用于新元素。当我单击第一个然后单击稍后出现的一个时,它工作正常。当我单击最后一个,然后单击它之前的一个时,它就会停留。我究竟做错了什么?
function choosediv(element){
if(document.querySelectorAll('.selected').length != 0){
document.getElementsByClassName('c')[0].classList.remove('selected');
}
element.classList.add('selected');
}
.c{
background-color: pink;
cursor: pointer;
}
.selected{
background-color: red;
}
<div class="c" onclick="choosediv(this)">Click me</div>
<div class="c" onclick="choosediv(this)">Click me</div>
<div class="c" onclick="choosediv(this)">Click me</div>
解决方案
问题是您只从该行中匹配的第 0selected
个元素中删除该类:
document.getElementsByClassName('c')[0].classList.remove('selected');
通过选择由 返回的数组的第 0 个元素getElementsByClassName('c')[0]
,每个div
未在索引 0 处选择的元素都将保持选中状态。
您也许应该forEach
对 , 选择的元素进行迭代getElementsByClassName('c')
,以从每个元素中删除selected
该类,而不仅仅是第 0 个。
推荐阅读
- html - 如何水平对齐两个父级(1个共同父级和1个唯一)内部的2个div?
- c# - CefSharp WPF 崩溃
- php - 使用带前导零的最大和最小长度的数字范围生成器
- selenium-chromedriver - getText() 和 getFirstSelectedOption().getText() 没有给出预期的文本
- aws-lambda - 使用 AWS lambda 将 CMYK 图像替换为 RGB
- python-3.x - 如何将音频映射到目标文本转录
- javascript - 如何在 react native 和 redux 应用程序中处理 JWT 令牌到期
- curl - 带有 JQ 解析错误的卷曲响应:解析错误:第 1 行第 9 列的数字文字无效
- python - 比较 Datetime 和不可排序的类型
- ios - IOS 开发新手,单击注释单元格时崩溃 线程 1:信号 SIGABRT 并由于未捕获的异常而终止应用程序