在jQuery选择器中通过:not隐藏$(this)以外的所有内容


97

高级标题,简单问题:

如何在jQuery中执行以下操作(除了,将所有内容隐藏$(this))?

$("table tr").click(function() {
    $("table tr:not(" + $(this) + ")").hide();
    // $(this) is only to illustrate my problem

    $("table tr").show();
});

Answers:



157
$("table.tr").not(this).hide();

顺便说$("table tr")一句,我想你的意思是(用空格而不是点)。
用它的方式,它会选择具有tr(例如<table class="tr">)类的每个表,这可能不是您想要的。

有关更多信息,请参见文档


是的,这是一个点错误。我以某种方式看不到这比亚历山大的解决方案更容易,后者看起来更干净。我知道我问过如何使用:not,但是兄弟姐妹方法看起来更干净。
科登姆2009年

3
只需添加一下,如果您要单击表中的某些内容以尝试使其隐藏所有表行(不包含包含您单击的项的行),请使用:$('tr').not($(this).closest('tr')).hide();
Jimbo,2013年

3
如果结构比同级更复杂,这对于选择特定元素很有用。我很难想出一个例子,但也许是想在网格中隐藏东西的地方,而不是网格本身。
goodeye

6

如果要将not()与其他一些选择器结合使用,则可以使用add():

$('a').click(function(e){
  $('a').not(this).add('#someID, .someClass, #someOtherID').animate({'opacity':0}, 800);
});

这将淡出所有其他链接,但单击的除外,另外淡出一些选定的ID和类。


0

我认为解决方案可以是这样的:

$("table.tr").click(function() {
    $("table.tr:not(" + $(this).attr("id") + "").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

-编辑评论:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

你是说:not(#" + ...。另外,除非元素具有ID(这是不可能的),否则这将不起作用。
SLaks

3
这将要求您在所有表行(或正在使用的任何行)上添加随机和不必要的ID。
尼克

@ SLaks,感谢您的纠正。在道指上,您可能会想到有时我们寻求的是快速帮助。为什么不掉以轻心。
andres descalzo

@nickf,是的,您是对的,但首先询问@Kordonme是否对每个TR都有ID,这样的评论会很好。
andres descalzo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.