删除组内元素的 class 以进行同位素过滤
Remove class for elements within a group for Isotope filtering
我试图在用户单击 'all' 按钮时从组中的所有按钮中删除 class 'is-checked'。我正在使用两组过滤器按钮:类别和标签。
我已经能够创建一个函数,从两个组的所有按钮中删除 class 'is-checked',但我还不能将函数隔离到每个组,虽然我很亲近。
最终函数会将 class 'is-checked' 添加到 'all' 按钮,并从该特定组中的任何其他按钮中删除 class。该函数有效,除了下面有问题的行:
$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');
}
});
});
如标题所述,这是在 Isotope 框架内用于具有组合过滤功能的投资组合(因此有两组不同的过滤器)。
有什么地方出错了吗?
这是范围问题。变量 $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()
.
找出它所在的按钮组。
我试图在用户单击 'all' 按钮时从组中的所有按钮中删除 class 'is-checked'。我正在使用两组过滤器按钮:类别和标签。
我已经能够创建一个函数,从两个组的所有按钮中删除 class 'is-checked',但我还不能将函数隔离到每个组,虽然我很亲近。
最终函数会将 class 'is-checked' 添加到 'all' 按钮,并从该特定组中的任何其他按钮中删除 class。该函数有效,除了下面有问题的行:
$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');
}
});
});
如标题所述,这是在 Isotope 框架内用于具有组合过滤功能的投资组合(因此有两组不同的过滤器)。
有什么地方出错了吗?
这是范围问题。变量 $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()
.