jQuery .show()和.toggleClass(“foo”)同时在一个对象上?

时间:2012-07-13 16:39:01

标签: jquery if-statement jquery-isotope

下面的沙箱代码(使用jQuery Isotope布局和排序插件)。会发生什么:

  1. 如果单击.item,它将增长以显示其更多内容(.maximise)
  2. 如果再次点击相同的 .item,它将缩小以隐藏其大部分内容(.minimise)
  3. 如果单击任何其他 .item,它将执行1. ,所有其他将执行2.

    $items = $('.item'); // solution
    
    $('.item').click(function () {
    
    var $this = $(this);
    var $previousSelected = $('.selected');
    
    if ($(this).hasClass('selected')) {
    
        $items.not(this).find('.slideshow').removeClass('transparent'); // solution
    
        $(this).removeClass('selected');
        $(this).children('.maximise').hide();
        $(this).children('.minimise').show();
    
    } else {
    
        $items.not(this).find('.slideshow').addClass('transparent'); // solution
    
        $previousSelected.removeClass('selected');
        $previousSelected.children('.minimise').show();
        $previousSelected.children('.maximise').hide();
    
        $(this).addClass('selected');
        $(this).children('.minimise').hide();
        $(this).children('.maximise').show();
    }
    
    // $container.isotope('shuffle'); uncomment to always randomise layout
    // $container.isotope('reLayout'); uncomment if no sorting logic is used
    $container
    .isotope('updateSortData', $this)
    .isotope('updateSortData', $previousSelected)
    .isotope();
    });
    
  4. 提前多多感谢!

    编辑找到.find()。然后.not()方法,然后实现只存储$ items = $('。item');

    中的所有Isotope元素

2 个答案:

答案 0 :(得分:2)

提示:如果您已将选择器查询存储在对象(变量)中,则无需在选择器中再次使用它,您只需使用该对象。

var $previousSelected = $('.selected');

...
//$($previousSelected).removeClass('selected');
$previousSelected.removeClass('selected');

答案 1 :(得分:1)

您可以使用jQuery的addClass方法执行此操作。 jQuery将检查是否已在元素上添加了.transparent类,然后才将其添加。

$($previousSelected).children('.minimise').addClass('transparent').show();

您可能还想在隐藏透明类时删除透明类,在这种情况下,我会在.hide()后删除该类:

$($previousSelected).children('.maximise').hide().removeClass('transparent');