我有这个脚本,基本上会显示基于类名的产品。因此,如果li的类名为'c2',它将显示产品c2,如果li具有类名'b8f b12r a12 ps10',则应显示所有这些产品b8f b12r a12 ps10。
我遇到的问题是它唯一过滤/显示具有单个类名而不是多个类名的选择器。我明白这是因为var = filter中的$(this),但是当我手动输入类名时它也没有显示。
$('#products ul li').hide();
$('#outlet li').click(function(e){
e.preventDefault();
var filter = $(this).attr('class');
$('#products ul li').show();
$('#products ul li:not(.' + filter + ')').hide();
<ul id="outlet">
<li class="c2">2</li>
<li class="d145">7</li>
<li class="b8f b12r a12 ps10">8</li>
</ul>
<ul id="products">
<li class="c2"><img src="images/c2.png">c2</li>
<li class="d145"><img src="images/d145.png">d145</li>
<li class="b8f"><img src="images/b8f.png">b8f</li>
<li class="b12r"><img src="images/b12r.png">b12r</li>
<li class="a12"><img src="images/a12.png">a12</li>
<li class="ps10"><img src="images/ps10.png">ps10</li>
</ul>
答案 0 :(得分:4)
试试这个:
$('#products ul li').show();
$('#products ul li').not('.' + $(this).attr('class').split(' ').join(', .')).hide();
我更喜欢使用单独的not
功能,因为它看起来更干净。这应该导致not
子句看起来像这样:
$('#products ul li').not('.c2, .d145, .a12').hide();
您的选择器也有错误,您选择的是#products ul li
,而ul
的ID为#products
,因此它应该是#products li
。
答案 1 :(得分:4)
尝试这样的事情:
$('#outlet li').click(function(e){
e.preventDefault();
$('#products ul li').hide();
var classes = $(this).attr('class').split(' '); // create an array of class names
$.each(classes, function() { // iterate over array
$('#products ul li.' + this).show();
});
});