jQuery - 根据列表中的选定项添加/删除类

时间:2011-05-04 12:49:02

标签: jquery

我在HTML中有一个非常基本的列表:

<ul id="thumbselector">
    <li><img src="http://placekitten.com/80/80"/></li>
    <li><img src="http://placekitten.com/81/81"/></li>
    <li><img src="http://placekitten.com/g/80/80"/></li>
    <li><img src="http://placekitten.com/g/81/81"/></li>
    <li><img src="http://placekitten.com/g/82/82"/></li>
    <li><img src="http://placekitten.com/g/81/82"/></li>
    <li><img src="http://placekitten.com/80/80"/></li>
    <li><img src="http://placekitten.com/81/81"/></li>
    <li><img src="http://placekitten.com/g/80/80"/></li>
    <li><img src="http://placekitten.com/g/81/81"/></li>
    <li><img src="http://placekitten.com/g/82/82"/></li>
    <li><img src="http://placekitten.com/g/81/82"/></li>                            
</ul>

然后我使用toggleClass在单击时将.active类添加到img:

$('#thumbselector img').click(function() {
  $(this).toggleClass('active');
}); 

但是我想让每个图像彼此都知道,所以当我选择一个图像并给它.active类时 - 如果我然后选择另一个图像我想确保任何以前的图像都带有.active类把它删除了。

有什么想法吗?

7 个答案:

答案 0 :(得分:4)

为什么不首先从所有这些中删除活动类呢? :

$('#thumbselector img').click(function() {
  $('#thumbselector img').removeClass('active');    
  $(this).addClass('active');
}); 

答案 1 :(得分:0)

http://api.jquery.com/toggleClass/

$('#foo').toggleClass(className, addOrRemove);

相当于:

if (addOrRemove) {
    $('#foo').addClass(className);
  }
  else {
    $('#foo').removeClass(className);
  }

答案 2 :(得分:0)

这应该有效:

$('#thumbselector img').click(function() {
  $(this).siblings().removeClass('active');
  $(this).addClass('active');
});

答案 3 :(得分:0)

$('#thumbselector img').click(function() {
  $('#thumbselector .active').removeClass('active');
  $(this).toggleClass('active');
});

在这里演示:http://jsfiddle.net/fermin/5JAUh/

答案 4 :(得分:0)

只需从所有兄弟元素中删除该类:

$('#thumbselector img').click(function() {
 $(this).parent().siblings().children().removeClass('active');
 $(this).toggleClass('active');
});

在此处查看此行动:http://jsfiddle.net/kvhWD/

答案 5 :(得分:0)

由于您正在动态添加/删除课程,因此您需要使用LIVE而不仅仅是CLICK。看我的例子:

$('#thumbselector img').live('click', function() {
  $('#thumbselector img').removeClass('active');    
  $(this).addClass('active');
}); 

答案 6 :(得分:0)

以下是此问题的解决方案:

$('#thumbselector img').on("click", function(){
    if ($(this).hasClass('active')) {
        $(this).removeClass('active');
    } else {
        $(this).addClass('active');
    }
});