2009-08-25 15 views
83

titolo avanzata, semplice domanda:

Come posso effettuare le seguenti operazioni in jQuery (nascondendo tutto tranne $(this))?

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

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

risposta

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

Traversing/Siblings

+10

jQuery rende tutto molto più elegante. +1! – JorenB

+14

+1. bizzarro – Lee

+5

jQuery è la seconda più grande invenzione di tutti i tempi dopo il computer stesso! Lo adoro! :) –

0

Penso che una soluzione può essere questo:

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

--edit for Comment:

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

Vuoi dire ': not (#" + ... '. Inoltre, questo non funzionerà a meno che l'elemento non abbia un ID, il che è improbabile. – SLaks

+0

Inoltre, vuoi dire" + ")") ... " – SLaks

+3

ti chiederebbe di aggiungere id casuali e non necessari su tutte le righe della tabella (o qualsiasi altra cosa tu stia utilizzando) – nickf

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

Per inciso, penso che intenda lo $("table tr") (con uno spazio invece di un punto).
Il modo in cui lo hai, seleziona ogni tabella che ha una classe di tr (ad esempio, <table class="tr">), che probabilmente non è ciò che desideri.

Per ulteriori informazioni, vedere documentation.

+0

Sì, è stato un errore Con il punto, in qualche modo non riesco a vedere come sia più facile della soluzione di Alexanders, che sembra più pulita. So che ho chiesto come farlo: no, ma il metodo dei fratelli sembra più pulito – Kordonme

+0

contento che ti piaccia :) è anche più breve! –

+1

Wo razzi come un incantesimo. Grazie! – nickb

6

Se si desidera combinare non() con alcuni altri selettori, è possibile utilizzare add():

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

Questo sarebbe FadeOut tutti gli altri link, ma il cliccato uno, e in aggiunta FadeOut alcuni ID scelti e classi.