在一个jquery行中隐藏除一个匹配之外的所有匹配项

时间:2017-05-08 22:15:08

标签: jquery hide show

在SO上似乎有许多答案可以隐藏选择器的所有元素,例如

$('li').not('.shown').hide()

但如果先前已隐藏了元素show(),则不会明确<li class="shown">。为了解决这个问题,其他SO答案建议使用2个衬垫,其缺点是首先隐藏所有元素,然后显示一个,这可能会导致闪烁:

$('li').hide()
$('li.shown').show()

我是否可以使用jQuery语法在单个循环中执行此操作?我不确定是否

$('li').hide().filter('.shown').show()

将执行此操作,或者是否只是与2个衬垫相同,首先在所有匹配上循环,然后再重新打开一个。

1 个答案:

答案 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>