在SO上似乎有许多答案可以隐藏选择器的所有元素,例如
$('li').not('.shown').hide()
但如果先前已隐藏了元素show()
,则不会明确<li class="shown">
。为了解决这个问题,其他SO答案建议使用2个衬垫,其缺点是首先隐藏所有元素,然后显示一个,这可能会导致闪烁:
$('li').hide()
$('li.shown').show()
我是否可以使用jQuery语法在单个循环中执行此操作?我不确定是否
$('li').hide().filter('.shown').show()
将执行此操作,或者是否只是与2个衬垫相同,首先在所有匹配上循环,然后再重新打开一个。
答案 0 :(得分:1)
隐藏$.not('.shown')
时,您可以使用:not(.shown)
或li
将这两者联系起来,然后使用$.end()
并使用$.filter('.shown').show()
$('li').not('.shown').hide().end().filter('.shown').show();
.shown {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li>asdf</li>
<li>foo</li>
<li class="shown">show</li>
<li>bar</li>