我正在尝试创建一个带有排序、布局按钮和多个过滤器的页面。同位素主页就是一个很好的例子,但那里只有一个过滤器。使用那个页面,我不知道如何添加更多的滤镜,这些滤镜可以一起工作(比如颜色和大小,一起工作,而不是一次一个)。下面是代码..。如何添加另一个过滤器?
<div class="option-combo">
<h2>Filter:</h2>
<ul id="filter" class="option-set clearfix" data-option-key="filter">
<li><a href="#show-all" data-option-value="*" class="selected">show all</a></li>
<li><a href="#elements" data-option-value=".element:not(.feature)">elements</a></li>
<li><a href="#features" data-option-value=".feature">features</a></li>
<li><a href="#examples" data-option-value=".example">examples</a></li>
</ul>
</div>
<div class="option-combo">
<h2>Sort:</h2>
<ul id="sort" class="option-set clearfix" data-option-key="sortBy">
<li><a href="#sortBy=original-order" data-option-value="original-order" data>original-order</a></li>
<li><a href="#sortBy=name" data-option-value="name">name</a></li>
<li><a href="#sortBy=year" data-option-value="year" class="selected">year</a></li>
<li><a href="#sortBy=size" data-option-value="size">size</a></li>
<li><a href="#sortBy=random" data-option-value="random">random</a></li>
</ul>
</div>
<div class="option-combo">
<h2>Layout: </h2>
<ul id="layouts" class="option-set clearfix" data-option-key="layoutMode">
<li><a href="#masonry" data-option-value="masonry" class="selected">masonry</a></li>
<li><a href="#fitRows" data-option-value="fitRows">fitRows</a></li>
<li><a href="#straightDown" data-option-value="straightDown">straightDown</a></li>
</ul>
</div>这是javascript:
$(function(){
var $container = $('#container');
$container.isotope({
masonry: {
columnWidth: 70
},
sortBy: 'year',
sortAscending : false,
getSortData: {
name : function ( $elem ) {
return $elem.find('.name').text();
},
size : function ( $elem ) {
return parseInt( $elem.find('.Size').text().replace( /,/g, ''), 10 );
},
year : function ( $elem ) {
return parseInt( $elem.find('.year').text().replace( /,/g, ''), 10 );
}
}
});
var $optionSets = $('#options .option-set'),
$optionLinks = $optionSets.find('a');
$optionLinks.click(function(){
var $this = $(this);
// don't proceed if already selected
if ( $this.hasClass('selected') ) {
return false;
}
var $optionSet = $this.parents('.option-set');
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');
// make option object dynamically, i.e. { filter: '.my-filter-class' }
var options = {},
key = $optionSet.attr('data-option-key'),
value = $this.attr('data-option-value');
// parse 'false' as false boolean
value = value === 'false' ? false : value;
options[ key ] = value;
if ( key === 'layoutMode' && typeof changeLayoutMode === 'function' ) {
// changes in layout modes need extra logic
changeLayoutMode( $this, options )
} else {
// otherwise, apply new options
$container.isotope( options );
}
return false;
});
});
发布于 2012-10-16 18:21:18
根据我的理解,多个过滤器意味着共享多个属性的选择元素。
例如,如果我们有以下同位素项目
<div class="isotope-item green big"></div>
<div class="isotope-item green small"></div>
<div class="isotope-item red big"></div>
<div class="isotope-item red small"></div>
<div class="isotope-item yellow big"></div>如果您希望将所有元素作为过滤器,
然后,您可以使用与您拥有的相同的JavaScript:
<h2>Filter:</h2>
<ul id="filter" class="option-set clearfix" data-option-key="filter">
<li><a data-option-value="*" class="selected">Show All</a></li>
<li><a data-option-value=".red">Show Red Elements</a></li>
<li><a data-option-value=".big">Show Big Elements</a></li>
<li><a data-option-value=".red, big">Show Elements Red OR Big</a></li>
<li><a data-option-value=".red.big">Show Elements Red AND Big</a></li>
</ul>该过滤器使用一个简单的jQuery选择器。将显示与所选内容匹配的所有内容,其余内容将隐藏。
发布于 2013-09-10 01:35:43
我试图解释我在这个问题上的方法here。
基本上,我们的想法是在onclick事件中正确使用同位素函数来查找限制性AND条件。
https://stackoverflow.com/questions/8995705
复制相似问题