我建议首先更改您的 HTML,以反映您只想选择一种服装类别(所以使用<input type="radio" />
):
<div class="tags">
<fieldset class="filter-grp">
<label><input type="radio" rel="skirt" name="year" /> skirt </label><br>
<label><input type="radio" rel="trousers" name="year" /> trousers </label><br>
<label><input type="radio" rel="shirt" name="year" /> shirt </label><br>
</fieldset>
<br>
<fieldset class="filter-grp">
<label><input type="checkbox" rel="blue" name="type" /> blue</label><br>
<label><input type="checkbox" rel="pink" name="type" /> pink</label><br>
<label><input type="checkbox" rel="green" name="type" /> green</label><br>
</fieldset>
<br>
</div>
<ul class="results">
<li class="blue skirt"> blue skirt</li>
<li class="pink shirt">pink shirt</li>
<li class="pink skirt">pink skirt</li>
<li class="blue shirt">blue shirt</li>
<li class="blue trousers">blue trousers</li>
<li class="green skirt">green skirt</li>
<li class="blue shirt">blue shirt</li>
<li class="pink trousers">pink trousers</li>
<li class="blue trousers">blue trousers</li>
<li class="blue skirt">blue skirt</li>
<li class="green shirt">green shirt</li>
</ul>
使用以下 jQuery:
$(function() {
$('div.tags').delegate('input[type=checkbox],input[type=radio]', 'change', function() {
var $lis = $('.results > li'),
$category = $('input:radio:checked')
.attr('rel'),
$colors = $('input:checkbox:checked'),
selectors = $colors.map(
function(){
return '.' + $category + '.' + $(this).attr('rel');
}).get().join(', ');
if ($category.length && $colors.length) {
$lis
.hide()
.filter(selectors)
.show()
.addClass("show");
}
else {
$lis.show().removeClass("show");
}
});
})
JS 小提琴演示。