javascript - 如何防止使用jquery向两个以上元素添加类?

标签 javascript jquery html class

我有一个包含可选单元格的表格,现在我尝试阻止一次选择两个以上的单元格。它应该像这样工作:如果我单击单元格 ID 4 那么它应该获得类 selected 如果接下来我单击单元格 ID 16 那么它也应该获取类selected,但如果接下来我单击单元格id20,那么单元格id4应该删除类selected和id 20 应该选择
我已经有类似的东西jsfiddle

$(".currency-cell").click(function(){
    if ($(this).hasClass("selected"))
        $(this).removeClass("selected");
    else {
        $(this).addClass("selected");
}).hover(function(){
   $(this).css("background","gold");
},
function(){
    if($(this).hasClass("selected"))
        $(this).css("background","gold");
    else
        $(this).css("background","silver");
});

最佳答案

您需要将所选元素的id存储在数组中。单击 td 时,将其 id 插入到数组末尾,或者如果数组中存在,则将其删除。如果数组长度大于 2,则删除数组的第一个索引。

var selectedIds = [];
$(".currency-cell").click(function(){
    $(this).toggleClass("selected");

    var id = $(this).attr("id");  
    if (selectedIds.indexOf(id) == -1)
       selectedIds.push(id);
    else   
        selectedIds.splice(selectedIds.indexOf(id), 1);
    
    if (selectedIds.length > 2) {  
        $("#" + selectedIds[0]).removeClass("selected");
        selectedIds.splice(0, 1);
    }       
});
table { 
    width: 200px; 
}
.currency-cell {
    width: 40px;
    height: 40px;
    border: 1px solid silver;
}
.selected { 
    background-color: gold; 
}
.currency-cell:hover { 
    background: gold; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr>
        <td id="24" class="currency-cell"></td>
        <td id="6" class="currency-cell"></td>
        <td id="4" class="currency-cell"></td>
        <td id="14" class="currency-cell"></td>
    </tr>
    <tr>
        <td id="1" class="currency-cell"></td>
        <td id="7" class="currency-cell"></td>
        <td id="8" class="currency-cell"></td>
        <td id="22" class="currency-cell"></td>            
    </tr>
    <tr>
        <td id="27" class="currency-cell"></td>
        <td id="30" class="currency-cell"></td>
        <td id="28" class="currency-cell"></td>
        <td id="29" class="currency-cell"></td>
    </tr>
</table>

您可以在 jsfiddle 中的完整 html 上进行测试。

关于javascript - 如何防止使用jquery向两个以上元素添加类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38192722/

相关文章:

javascript - angularjs 的 ng 映射中的距离

javascript - 在 Chrome 和 IE 中单击后退按钮时防止重新加载 Ajax 数据

javascript - 剑道 ui 网格模板 else if

html - 我正在寻找 HTML 中不间断空格的替代方法

javascript - MediaElement.js + 显示 JQuery 模态 : how to pause video/audio on <a ="close-reveal-modal">&#215;</a>

javascript - 需要从 JavaScript 获取正确格式的时间到 ISODateString?

javascript - 在 D3 中,如何根据数据中的值为每个数据元素创建多个元素?

Jquery Card Game first-child 和克隆错误

jquery - 如何关闭 jquery 日期选择器

node.js - 在网页上运行node.js模块