在一个jquery行中隐藏除一个匹配项外的所有匹配项(如图所示)

在一个jquery行中隐藏除一个匹配项外的所有匹配项(如图所示),jquery,hide,show,Jquery,Hide,Show,似乎有很多答案,所以隐藏选择器中除一个元素外的所有元素,例如 $('li').not('.shown').hide() 但如果元素先前已隐藏,则这不会显式地显示元素。为了解决这个问题,其他SO答案建议使用2行,其缺点是先隐藏所有元素,然后显示一个元素,这可能会导致闪烁: $('li').hide() $('li.shown').show() 是否有一种jQuery语法可以在单个循环中使用?我不确定是否 $('li').hide().filter('.shown').show() 将执行此操

似乎有很多答案,所以隐藏选择器中除一个元素外的所有元素,例如

$('li').not('.shown').hide()
但如果元素先前已隐藏,则这不会显式地显示元素。为了解决这个问题,其他SO答案建议使用2行,其缺点是先隐藏所有元素,然后显示一个元素,这可能会导致闪烁:

$('li').hide()
$('li.shown').show()
是否有一种jQuery语法可以在单个循环中使用?我不确定是否

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

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

您可以使用
$将两者链接起来。not('.show')
:not(.show)
隐藏
li
,然后使用
$.end()
$.filter('.show').show()

$('li').not('.show').hide().end().filter('.show').show()
。如图所示{
显示:无;
}

  • asdf
  • 显示

  • 酒吧
  • 谢谢。那么jQuery是否优化了这一点,使得
    .show
    元素不会先隐藏,然后再显示?如何测试底层jQuery算法?显然,语法中似乎应该有足够的信息来明确意图。[编辑-抱歉,当然,'not'会那样做。Doh.]重复两次精炼过滤器('.show')似乎有点难看-我想没有内置内容。所有这些都在同一个列表中吗?他们是兄弟姐妹吗?或者他们可能在不同父母的网页上的任何地方?可能在网页上的任何地方。我希望这是一般性的。似乎我想要类似于
    end()
    的东西,但它会选择以前过滤掉的元素。一种
    .invert_last()
    选择器。我在文档中看不到任何类似的内容。重复的语法确实让它变得有些复杂。例如,我现在似乎有这样一个相当不可维护的链(我在一个有时隐藏的框中显示所选文本):
    $('.closeable').not(#boxContainer,#aboutBox.hide().end().filter('#boxContainer,#aboutBox').show().find('.hiddeble').not('.#htmlext how').hide().end().filter('htmlext how').show'));