Ukryj wszystko oprócz $ (this) via: not in jQuery selector

97

Zaawansowany tytuł, proste pytanie:

Jak mogę wykonać następujące czynności w jQuery (ukrywając wszystko oprócz $(this))?

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

    $("table tr").show();
});
Kordonme
źródło

Odpowiedzi:

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

Na marginesie, myślę, że masz na myśli $("table tr")(ze spacją zamiast kropki).
Tak, jak to masz, wybiera każdą tabelę, która ma klasę tr(np. <table class="tr">), Która prawdopodobnie nie jest tym, czego chcesz.

Więcej informacji można znaleźć w dokumentacji .

SLaks
źródło
Tak, to był błąd z kropką. Jakoś nie widzę, jak to jest łatwiejsze niż rozwiązanie Alexanders, które wydaje się czystsze. Wiem, że zapytałem, jak to zrobić: nie, ale metoda rodzeństwa wydaje się po prostu bardziej przejrzysta.
Kordonme
3
Aby dodać, jeśli klikasz coś w tabeli, aby spróbować ukryć wszystkie wiersze tabeli Z WYŁĄCZENIEM wiersza zawierającego kliknięty element, użyj:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Jest to przydatne przy wybieraniu określonych elementów, w przypadku gdy struktura jest bardziej złożona niż pozwala na to rodzeństwo. Trudno mi wymyślić przykład, ale być może coś, w czym chcesz ukryć rzeczy wewnątrz siatki, ale nie samą siatkę.
goodeye
6

Jeśli chcesz połączyć not () z kilkoma innymi selektorami, możesz użyć add ():

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

Spowoduje to zanik wszystkich innych linków oprócz klikniętego i dodatkowo zaniknie niektórych wybranych identyfikatorów i klas.

lenooh
źródło
0

Myślę, że rozwiązaniem może być to:

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

- EDYTUJ do komentarza:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
źródło
Masz na myśli :not(#" + .... To nie zadziała, chyba że element ma identyfikator, co jest mało prawdopodobne.
SLaks
3
wymagałoby to dodania losowych i niepotrzebnych identyfikatorów do wszystkich wierszy tabeli (lub czegokolwiek, czego używasz).
nickf,
@ SLaks, dzięki za korektę. W związku z tym możesz mieć na uwadze, że czasami szukamy pomocy w postaci szybkich odpowiedzi. Dlaczego nie lekceważyć tego, co umieścimy.
andres descalzo
@nickf, tak, masz rację, ale ten komentarz byłby dobry, gdybyś zapytał @Kordonme, czy ma identyfikator dla każdego TR.
andres descalzo,