Cacher tout sauf $ (this) via: pas dans le sélecteur jQuery

97

Titre avancé, question simple:

Comment puis-je faire ce qui suit dans jQuery (en cachant tout sauf $(this))?

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

    $("table tr").show();
});
Kordonme
la source

Réponses:

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

En passant, je pense que vous voulez dire $("table tr")(avec un espace au lieu d'un point).
De la façon dont vous l'avez, il sélectionne chaque table qui a une classe de tr(par exemple, <table class="tr">), ce qui n'est probablement pas ce que vous voulez.

Pour plus d'informations, consultez la documentation .

SLaks
la source
Ouais, c'était une erreur avec le point. Je ne vois pas en quelque sorte comment cela est plus facile que la solution Alexanders, qui semble plus propre. Je sais que j'ai demandé comment le faire avec: non, mais la méthode des frères et sœurs semble juste plus propre.
Kordonme
3
Juste pour ajouter, si vous cliquez sur quelque chose dans le tableau pour essayer de l'obtenir pour masquer toutes les lignes du tableau EXCLUANT la ligne contenant l'élément sur lequel vous avez cliqué, utilisez:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Ceci est utile pour sélectionner des éléments spécifiques, au cas où la structure serait plus complexe que les frères et sœurs le permettraient. J'ai du mal à trouver un exemple, mais peut-être quelque chose où vous voulez cacher des choses à l'intérieur d'une grille, mais pas la grille elle-même.
goodeye
6

Si vous souhaitez combiner not () avec d'autres sélecteurs, vous pouvez utiliser add ():

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

Cela ferait disparaître tous les autres liens, à l'exception de celui sur lequel vous avez cliqué, et supprimerait également certains identifiants et classes choisis.

lenooh
la source
0

Je pense qu'une solution peut être la suivante:

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

--EDIT pour commentaire:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
la source
Tu veux dire :not(#" + .... De plus, cela ne fonctionnera que si l'élément a un ID, ce qui est peu probable.
SLaks
3
cela vous obligerait à ajouter des identifiants aléatoires et inutiles sur toutes les lignes de votre table (ou tout ce que vous utilisez).
nickf
@ SLaks, merci pour la correction. Sur le dow, vous pouvez avoir à l'esprit que parfois ce que nous cherchons est d'avoir des réponses rapides pour vous aider. Pourquoi ne pas prendre à la légère ce que nous mettons.
andres descalzo
@nickf, oui, vous avez raison, mais ce commentaire serait bon de demander d'abord à un @Kordonme s'il a un ID pour chaque TR.
andres descalzo