一次在一个元素上设置 active class

Set active class on one element at the time

我拥有的是 table 可用 times/date 的表示。用户可以通过单击 link "Choose" 选择时间。单击此 link 时, class "active" 已设置,但我想要的是当用户选择其他时间时,先前的 class 被删除并设置在新元素上

我目前拥有的:

<div class="wrapper-div">
    <div class="row">
        <div class="date">monday, 2015 09 02 </div>
        <div class="time">12:10</div>
        <div class="select"><a href="#">Choose <span class="select-arrow"></span></a>            
   </div>
    </div>
    <div class="row">
        <div class="date">thuesday, 2015 06 22</div>
        <div class="time">12:30</div>
        <div class="select"><a href="#">Choose <span class="select-arrow"></span></a></div>
    </div>
    <div class="row">
        <div class="date">wensday, 2015 02 9</div>
        <div class="time">09:15</div>
        <div class="select"><a href="#">Choose <span class="select-arrow"></span></a></div>
    </div> 
</div>

jQuery代码:

$('.select a').click(function(e){
    e.preventDefault();
    $(this).parents().eq(1).addClass('active');
    $('.wrapper-div div').each(function(){
        removeClass('active');
    });
});

我的工作 fiddle:http://goo.gl/E5hhyn

解决这个问题的最佳方法是什么?

您的 each 语法不正确,因为您没有对任何 jQuery 对象调用 removeClass。无论如何,对 each 本身的需求是多余的。试试这个:

$('.select a').click(function(e){
    e.preventDefault();
    $('.wrapper-div div').removeClass('active'); // remove first
    $(this).parents().eq(1).addClass('active');
});

工作fiddlehttp://jsfiddle.net/gtog33qk/1/

$('.select a').click(function(e){
    e.preventDefault();
    $('.wrapper-div div').each(function(i,e){
        $(e).removeClass('active');
    });
    $(this).closest('.row').addClass('active');

});

只是更改了一点代码,使用 closest 找到完整的活动行,您需要在元素上使用 removeClass,如 Rory 所解释的

您可以使用 jQuery 的 .find() 方法找到要删除的 class,然后使用 jQuery 的 .remove() 方法删除class。 class 现在消失了,只需添加新的 .active class.

您首先添加 Class 然后删除所有 "active" 类,如果您首先删除所有 类 "active" 然后将它添加到点击的那个它应该工作。

$('.wrapper-div .row').each(function(){
    $(this).removeClass('active');
});
$(this).parents().find(".row:first").addClass('active');