javascript - 如何只允许一个具有特定类的元素

标签 javascript html css

我有一些 onclick 触发功能的 div。我想让它在单击时,刚刚单击的 div 具有 .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>

最佳答案

问题是您只是从该行中匹配的 0th 元素中删除 selected 类:

document.getElementsByClassName('c')[0].classList.remove('selected');

通过选择 getElementsByClassName('c')[0] 返回的数组的第 0 个元素,每个选择的 div not 在索引处0 将保持选中状态。

您或许应该对 getElementsByClassName('c') 选择的元素使用 forEach 迭代,以删除 selected 类来自每一个,而不仅仅是第 0 个。

关于javascript - 如何只允许一个具有特定类的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57878224/

相关文章:

c# - 使用 asp.net 网站使用序列化 json 的代码隐藏

javascript - 如何关闭html中的iframe弹出窗口

javascript - 从无序列表中获取点击值

html - 考虑缩放时如何在html css中实现绝对文本位置?

javascript - 如何根据id向列表框添加星号

javascript - 将时间字符串从 hhmm 转换为 hh :mm format in javascript

javascript - 如何在传递到组件之前在 reactjs 中旋转 base64 图像?

javascript - 使用输入类型=文件选择文件并使用 ng-repeat 显示路径后触发函数

css - 并排居中两个 div,但一个 div 具有固定位置

html - 如何使通过 bootstrap css 加载的图形响应?