删除组内元素的类以进行同位素过滤

时间:2015-09-13 09:05:19

标签: jquery click each jquery-isotope

我试图删除该课程,并且已经检查了#39;当用户点击“全部”按钮时,从群组中的所有按钮按钮。我使用了两组过滤按钮:类别和标签。

我已经能够创建一个功能,可以删除已经检查过的班级'从两组中的所有按钮开始,但我还没有能够将功能分离到每个组,尽管我非常接近。

最后一项功能会添加“已检查”类别。到了所有的'按钮并从该特定组中的任何其他按钮中删除该类。该功能有效,但下面有问题的行除外:

    $buttonGroup.find('.is-checked').removeClass('is-checked');

代码:

// class toggling for all buttons by group
    $('.button-group').each( function( i, buttonGroup ) {
        var $buttonGroup = $( buttonGroup );
        var $this = $(this);
        $buttonGroup.on( 'click', 'button', function() {
            if ( $this.hasClass('all') ) {
                $buttonGroup.find('.is-checked').removeClass('is-checked');
                $this.addClass('is-checked');
            }
            else {
                $buttonGroup.find('.all').removeClass('is-checked');
            }
        });
    });

正如标题所提到的,这是在同位素框架内用于具有组合过滤的投资组合(因此是两组不同的过滤器)。

我出错的任何想法?

1 个答案:

答案 0 :(得分:0)

这是范围问题。变量$buttongroup存在于each调用的函数中,而不是在单击的事件处理程序中。我建议像这样解决它:

// When someone clicks a button in a button group.
$('.button-group button').click(function() {
    // Get the button that was clicked.
    $this = $(this);
    // Get the button group the button that was clicked is in.
    $buttonGroup = $this.parents('.button-group');
    // And now this is just a copy of your old code below.
    if ( $this.hasClass('all') ) {
        $buttonGroup.find('.is-checked').removeClass('is-checked');
        $this.addClass('is-checked');
    }
    else {
        $buttonGroup.find('.all').removeClass('is-checked');
    }
});

如您所见,此方法不需要each。相反,该按钮使用parents()找出它所在的按钮组。