Verstecke alle außer $ (this) über: nicht im jQuery-Selektor

97

Fortgeschrittener Titel, einfache Frage:

Wie kann ich in jQuery Folgendes tun (alles außer ausblenden $(this))?

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

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

Antworten:

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

Nebenbei denke ich, Sie meinen $("table tr")(mit einem Leerzeichen anstelle eines Punktes).
So wie Sie es haben, wählt es jede Tabelle aus, die eine Klasse von tr(z. B. <table class="tr">) hat, was wahrscheinlich nicht das ist, was Sie wollen.

Weitere Informationen finden Sie in der Dokumentation .

SLaks
quelle
Ja, es war ein Fehler mit dem Punkt. Ich verstehe irgendwie nicht, wie das einfacher ist als die Alexanders-Lösung, die sauberer zu sein scheint. Ich weiß, ich habe gefragt, wie es geht: nicht, aber die Geschwistermethode scheint einfach sauberer zu sein.
Kordonme
3
Nur um hinzuzufügen, wenn Sie auf etwas in der Tabelle klicken, um zu versuchen, alle Tabellenzeilen auszublenden, ausgenommen die Zeile mit dem Element, auf das Sie geklickt haben, verwenden Sie:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Dies ist nützlich für die Auswahl bestimmter Elemente, falls die Struktur komplexer ist, als es Geschwister zulassen würden. Es fällt mir schwer, ein Beispiel zu finden, aber vielleicht etwas, bei dem Sie Dinge in einem Raster verstecken möchten, aber nicht das Raster selbst.
Goodeye
6

Wenn Sie not () mit einigen anderen Selektoren kombinieren möchten, können Sie add () verwenden:

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

Dies würde alle anderen Links außer dem angeklickten ausblenden und zusätzlich einige ausgewählte IDs und Klassen ausblenden.

lenooh
quelle
0

Ich denke, eine Lösung kann folgende sein:

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

--EDIT für Kommentar:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
quelle
Du meinst :not(#" + .... Dies funktioniert auch nur, wenn das Element eine ID hat, was unwahrscheinlich ist.
SLaks
3
Dies würde erfordern, dass Sie allen Ihren Tabellenzeilen (oder was auch immer Sie verwenden) zufällige und unnötige IDs hinzufügen.
Nickf
@ SLaks, Danke für die Korrektur. Auf dem Weg dorthin denken Sie vielleicht daran, dass wir manchmal eine schnelle Antwort suchen, um zu helfen. Warum nicht leicht nehmen, was wir setzen.
andres descalzo
@nickf, Ja, du hast recht, aber dieser Kommentar wäre gut, wenn du zuerst einen @Kordonme fragst, ob er eine ID für jede TR hat.
andres descalzo