Nascondi tutto tranne $ (questo) tramite: non nel selettore jQuery


97

Titolo avanzato, domanda semplice:

Come posso fare quanto segue 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();
});

Risposte:



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

Per inciso, penso che tu intenda $("table tr")(con uno spazio invece di un punto).
Il modo in cui lo hai, seleziona ogni tabella che ha una classe di tr(es. <table class="tr">), Che probabilmente non è quello che vuoi.

Per ulteriori informazioni, vedere la documentazione .


Sì, è stato un errore con il punto. In qualche modo non riesco a vedere come sia più semplice della soluzione di Alexanders, che sembra più pulita. So di aver chiesto come farlo con: no, ma il metodo dei fratelli sembra solo più pulito.
Kordonme

3
Solo per aggiungere, se stai facendo clic su qualcosa all'interno della tabella per provare a far sì che nasconda tutte le righe della tabella ESCLUSA la riga contenente l'elemento su cui hai fatto clic, usa:$('tr').not($(this).closest('tr')).hide();
Jimbo

3
Questo è utile per selezionare elementi specifici, nel caso in cui la struttura sia più complessa di quanto consentirebbero i fratelli. Ho difficoltà a trovare un esempio, ma forse qualcosa in cui vuoi nascondere le cose all'interno di una griglia, ma non la griglia stessa.
arrivederci

6

Se vuoi combinare not () con altri selettori, puoi usare add ():

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

Questo sbiadirebbe tutti gli altri collegamenti, tranne quello su cui si è fatto clic, e inoltre alcuni ID e classi scelti.


0

Penso che una soluzione possa essere questa:

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

--EDIT per commento:

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

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

3
ciò richiederebbe di aggiungere ID casuali e non necessari su tutte le righe della tabella (o qualunque cosa tu stia utilizzando).
nickf

@ SLaks, grazie per la correzione. Sul dow, potresti tenere presente che a volte ciò che cerchiamo è avere una risposta rapida per aiutare. Perché non prendere alla leggera quello che mettiamo.
andres descalzo

@nickf, Sì, hai ragione, ma questo commento sarebbe utile prima di chiedere a @Kordonme se hanno un ID per ogni TR.
andres descalzo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.