2009-05-27 1 views
5

Non riesco a selezionare un elemento particolare con jQuery. Condizioni descritte qui:jQuery selection: attraversando, quindi arretrato

  • Al punto rilevante nella mia funzione, this riferimenti un span.
  • Questo span può essere un bambino, un nipotino o un pronipote, ma da qualche parte nella gerarchia, è contenuto da un numero td.
  • Desidero selezionare l'ultimo span all'interno dello td.
  • Il span può essere this o potrebbe essere un altro span.
  • I tag span da selezionare sono figlio diretto del contenitore td, quindi last-child è praticabile. Tuttavia, per la flessibilità futura è preferibile una soluzione che non presuppone che sia un bambino diretto.

Finora, io sto usando questo per selezionare l'elemento principale corretto:

$(this).parents('td') 

Non so come attraversare di nuovo verso il basso l'albero del DOM per ottenere la finale span interno della selezionato td . Grazie!

Modifica

Per i miei commenti qui sotto, sarebbe anche bello per selezionare da un span o div, a seconda di quale è l'ultima.

risposta

12
$(this).parents('td').children('span:last'); 

dovrebbe fare il trucco.

Modifica

non ho notato il vostro desiderio di fare non solo con i bambini immediati. Se si desidera che tutti discendenti, quindi si può usare

$(this).parents('td').find('span:last') 

avevo assunto la span sarebbe sempre un figlio della td.

Modifica finale

Per l'amor di posteri (e per rendere più facile per le persone a trovare questa risposta in futuro), dal momento che questo è stato già accettato come la risposta, Ben si avvicinò con una soluzione più elegante in la sua risposta che ho intenzione di mettere qui:

$(this).closest('td').find('div,span').filter(':last') 

Come ha detto Ben, è necessario utilizzare JQuery 1.3 per closest() al lavoro. Buon lavoro!:-)

+0

bambini() cerca solo i bambini immediati. –

4

La funzione che stai cercando è find(expr), che cerca tutti i nodi discendenti:

$(this).closest('td').find('span:last') 

Edit: Per selezionare l'ultimo div o span:

$(this).closest('td').find('div,span').filter(':last') 

Modifica 2:Mark rende un punto eccellente sull'utilizzo di closest() anziché parents(), ma tieni presente che devi utilizzare jQuery 1.3 per questo.

+0

Grazie! Possiamo modificare ancora un po '? Che cosa succede se volevo trovare l'ultimo elemento, ma invece di limitare lo span, potrebbe essere un intervallo o un div? –

+0

Puoi sostituire lo span con qualsiasi elemento desideri. –

+0

Sto parlando di uno span OPPURE di un div. Sintassi non valida, ma qualcosa del genere: $ (questo) .parents ('td'). Filter ('input'). Find ('div, span: last') –

5

Preferisco utilizzare closest in questo caso, invece parents. Non devi preoccuparti che ci siano due o più elementi "td" nella discendenza.

$(this).closest('td').children("span:last")