对于所有的jQuery英雄,我需要帮助!(再次)
我在网上找到了和我类似的问题,但到目前为止还没有答案:-/
我想用jquery isotope过滤一堆条目,我改编了插件主页上的组合过滤器示例,它工作正常,看起来像这样:
$(function () {
var $container = $('#container'),
filters = {};
$container.isotope({
itemSelector: '.item',
filter: '',
});
// filter links
$('.filter a').click(function () {
var $this = $(this);
// don't proceed if already selected
if ($this.hasClass('selected')) {
return;
}
var $optionSet = $this.parents('.option-set');
// change selected class
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');
// store filter value in object
// i.e. filters.color = 'red'
var group = $optionSet.attr('data-filter-group');
filters[group] = $this.attr('data-filter-value');
// convert object into array
var isoFilters = [];
for (var prop in filters) {
isoFilters.push(filters[prop])
}
var selector = isoFilters.join('');
$container.isotope({
filter: selector
});
return false;
}); });
以及过滤器菜单的一些HTML:
<div id="nav">
<ul class="filter option-set" data-filter-group="who">
<li><a href="#filter-who-any" data-filter-value="" class="selected">Any</a></li>
<li><a href="#filter-who-boys" data-filter-value=".boys">Boys</a></li>
<li><a href="#filter-who-girls" data-filter-value=".girls">Girls</a></li>
</ul>
</div>
我设置了一个小提琴演示3过滤器类别,可以组合:* * 一个
现在,我希望能够从每个类别中选择多个标记:
第1类:a或b或c
- 和**
第2类:a或b或c
- 和**
类别3:a或b或c
desandro有一个check-box-example,但这不是我想要的,因为我想保持类别之间的AND条件。基本上我想要3个过滤器类别,每个类别都有一些复选框(或者链接,但我猜复选框更有用)。我认为两个例子中使用的方法完全不同,我不知道如何结合它们的功能。
我希望你明白我的意思,希望任何人都能帮我找到解决办法。
先谢了!
6条答案
按热度按时间3qpi33ja1#
将多个过滤器类型与metafizzy同位素过滤一起使用需要多维数组来保存每个过滤器类型的数组。
有关完整的代码说明,请参阅我对this question的回答
nszi6y052#
看这里
http://codepen.io/desandro/pen/btFfG
这和DrewT的答案是一样的,只是来自同位素小组。
所有你要做的,以过滤是把每个组下相同的对象
现在,您所要做的就是调用getComboFilter函数(您不必理解getComboFilter中的代码,可以将其视为同位素的一部分)
ss2ws0br3#
以下是JS Fiddle代码,您可以使用多个下拉菜单选择同位素组合过滤器
https://jsfiddle.net/srikanthLavudia/vhrbqn6p/
mrfwxfqh4#
我可以让它工作,但它不是那么简单,因为我想在第一个例子。我认为你需要记住几件事:
1.如果你想使用一个限制性的AND条件,那么我建议不要使用**"data-filter-value"选项。相反,把你的filter变量作为类**。那么,你需要在onclick事件中自己触发同位素函数。这是因为否则你将触发"default"同位素功能,当用户点击按钮,你将无法实现的限制性和提到。
1.在相同的方向上,你将需要使用新的变量名(所以新的类)为每一个嵌套的过滤器选项的组合你要使用。否则,我不认为其他的方式(目前)获得一个限制性的AND条件。
一个例子是类似于电子书列表的东西,它可以按品牌过滤,另一个子过滤器基于它们所属的不同价格范围。
我在下面给你展示了一个代码示例,我在那里实现了这个想法,它可以给你一个暗示我的意思是什么:
超文本:
浏览器:
jdgnovmf5#
很抱歉重提这个问题,但是我最近遇到了同样的问题,并且(恕我直言)浪费了很多时间使用组合选择器来解决这个问题(将数组A中的每个类与数组B中的每个类组合起来,等等)。
使用一个过滤函数,它允许任意的复杂度,并且可能是所有重要情况的正确选择。
最重要的是,使用选择器没有任何性能优势(如果选择器被直接提供给
querySelector
或jQuery调用,您可能会想到这一点)。因此,您最好将筛选逻辑放入函数中,而不是尝试生成选择器字符串。
tzcvj98z6#
不喜欢jQuery?我修改了http://codepen.io/desandro/pen/btFfG的代码,@Luke将其作为ESNext/Vanilla的答案发布。
我想我会把这个贴出来,因为这是一个相当值得一看的问题。
这里唯一的区别是,您必须自己创建HTML。
下面是示例化它的方法: