Ocultar tudo, exceto $ (this) via: não no seletor jQuery

97

Título avançado, pergunta simples:

Como posso fazer o seguinte no jQuery (ocultar tudo, exceto $(this))?

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

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

Respostas:

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

Como um aparte, eu acho que você quer dizer $("table tr")(com um espaço em vez de um ponto).
Do jeito que você fez, ele seleciona todas as tabelas que possuem uma classe de tr(por exemplo, <table class="tr">), que provavelmente não é o que você deseja.

Para obter mais informações, consulte a documentação .

SLaks
fonte
Sim, foi um erro com o ponto. De alguma forma, não consigo ver como isso é mais fácil do que a solução de Alexander, que parece mais limpa. Eu sei que perguntei como fazer com: não, mas o método dos irmãos parece mais limpo.
Kordonme
3
Só para adicionar, se você está clicando em algo dentro da tabela para tentar ocultar todas as linhas da tabela EXCLUINDO a linha que contém o item que você clicou, use:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Isso é útil para selecionar elementos específicos, caso a estrutura seja mais complexa do que os irmãos permitiriam. Estou tendo dificuldade em encontrar um exemplo, mas talvez algo em que você queira ocultar as coisas dentro de uma grade, mas não a própria grade.
goodeye
6

Se você deseja combinar not () com alguns outros seletores, você pode usar add ():

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

Isso faria desaparecer todos os outros links, exceto aquele clicado e, adicionalmente, desapareceria alguns ids e classes escolhidos.

lenooh
fonte
0

Acho que uma solução pode ser esta:

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

- EDIT para comentário:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
fonte
Você quer dizer :not(#" + .... Além disso, isso não funcionará a menos que o elemento tenha um ID, o que é improvável.
SLaks
3
isso exigiria que você adicionasse ids aleatórios e desnecessários em todas as linhas da tabela (ou o que quer que você esteja usando).
nickf
@ SLaks, Obrigado pela correção. No dow, você deve ter em mente que às vezes o que procuramos é ter um Quick Answers para ajudar. Por que não considerar levianamente o que colocamos.
andres descalzo
@nickf, Sim, você está certo, mas seria bom primeiro perguntar a um @Kordonme se eles têm ID para cada TR.
andres descalzo