2009-08-25 14 views
83

zaawansowane tytuł, proste pytanie:

Jak mogę wykonać następujące czynności w jQuery (ukrywa się wszystko z wyjątkiem $(this))?

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

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

Odpowiedz

174
$(this).siblings().hide(); 

Traversing/Siblings

+10

jQuery sprawia, że ​​wszystko jest o wiele bardziej eleganckie. +1! – JorenB

+14

+1. Freakin piękne. – Lee

+5

jQuery to drugi największy wynalazek wszech czasów po samym komputerze! Kocham to! :) –

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(); 
}) 

--edit na komentarz:

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

Masz na myśli ': not (#" + ... '. Również to nie zadziała, jeśli element nie ma identyfikatora, co jest mało prawdopodobne. – SLaks

+0

Również masz na myśli' + ")") ... ' – SLaks

+3

this wymagałoby dodania losowych i niepotrzebnych identyfikatorów do wszystkich wierszy tabeli (lub czegokolwiek, z czego korzystasz) – nickf

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

Na marginesie myślę, że masz na myśli $("table tr") (z spacją zamiast kropki).
Sposób, w jaki go masz, wybiera wszystkie tabele z klasą tr (np. <table class="tr">), co prawdopodobnie nie jest tym, czego potrzebujesz. Aby uzyskać więcej informacji, zobacz

.

+0

Tak, to był błąd W jakiś sposób nie widzę, jak to jest łatwiejsze niż rozwiązanie Alexandersa, które wydaje się być bardziej czyste.Znam pytanie, jak to zrobić z: nie, ale metoda rodzeństwa wydaje się po prostu bardziej czysta :) – Kordonme

+0

Cieszę się, że Ci się podoba :) jest krótszy! –

+1

Wo rks jak urok. Dzięki! – nickb

6

Jeśli chcesz nie łączyć() z kilkoma innymi selektorów można używać add():

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

To Fadeout wszystkie inne linki, ale kliknięciu jeden, a dodatkowo Fadeout kilka wybranych identyfikatorów i klasy.