2011-03-17 14 views
163

Ho un <div> che contiene molti altri <div> s, ciascuno con un diverso livello di nidificazione. Piuttosto che dare a ogni bambino un identificatore <div>, preferisco semplicemente fornire l'identificativo radice <div>. Ecco un esempio:Come trovare un genitore con una classe conosciuta in jQuery?

<div class="a" id="a5"> 
    <div class="b"> 
    <div class="c"> 
     <a class="d"> 
     </a> 
    </div> 
    </div> 
</div> 

Se scrivo una funzione in jQuery per rispondere alla classe d e voglio trovare l'ID per il suo genitore, classe a, come farei questo? Non posso semplicemente fare $('.a').attr('id'); perché ci sono più classi a s. Potrei trovare l'ID del genitore del genitore del suo genitore ma quello sembra di progettazione povera, lento e non molto polimorfico (dovrei scrivere il codice differente per trovare l'identificazione per la classe c).

risposta

334

Supponendo che this è .d, è possibile scrivere

$(this).closest('.a'); 

Il closest method restituisce il genitore più interno del vostro elemento che corrisponde al selettore.

+0

http://api.jquery.com/closest/ –

+30

Nota che c'è un po 'di cattura: se il tuo elemento di partenza corrisponde anche alla query, non ottieni l'elemento genitore ma lo stesso elemento. Questo può o non può essere il comportamento desiderato. In caso contrario, lo raccomando: $ (questo) .parent(). Closest ('.un'); – user766304

+1

Molto utile. Uso sempre $ (this) .parent(). Parent(). Parent() e sapevo che c'era una soluzione migliore. –

13

passare un selettore per la funzione di jQuery parents:

d.parents('.a').attr('id') 

EDIT Hmm, in realtà la risposta di Slaks è superiore se desideri solo l'antenato più vicino che corrisponde al selettore.

+1

Non è un genitore diretto. – SLaks

+1

@Slaks, hai ragione. Aggiornato da 'padre' a' genitori'. –

4

È possibile utilizzare parents() per ottenere tutti i genitori con il selettore indicato.

Descrizione: I antenati di ciascun elemento nel set corrente di corrispondenti elementi, eventualmente filtrati da un selettore .

Ma parent() otterrà solo il primo elemento principale dell'elemento.

Descrizione: ottenere il padre di ogni elemento nel set corrente di corrispondenti elementi, eventualmente filtrati da un selettore .

jQuery parent() vs. parents()

E c'è .parentsUntil() che credo sarà il migliore.

Descrizione: I antenati di ciascun elemento nel set corrente di corrispondenti elementi , fino a, ma non comprendente l'elemento abbinato dal selettore.

+0

Vuole solo un _single_ parent, quindi dovrebbe chiamare 'closest'. – SLaks

+1

Grazie, per la correzione, lascerò la mia risposta qui per far sapere alle persone la differenza e capire dal mio errore. –

Problemi correlati