2013-05-03 5 views
5

non riuscivo a trovare una rapida risposta a questo problema ...jQuery: controllanti() volte 3 - come evitare di accatastamento dei genitori se non so un selettore

Sono all'interno di un click-evento e using $(this)

Sto provando a selezionare un elemento di tre livelli senza sapere quale selettore ha.

$(this).parent().parent().parent().attr('id') 

Questo funziona bene, ma c'è un modo migliore per farlo?

Mi piace parent(3x) o simile?

+2

Minor tempo nitpick: Usa '.prop()' 'non .attr()' per ottenere l'id. –

+0

@AnthonyGrist ma id è un attributo non una proprietà, giusto? –

+2

@roasted - È entrambi, se l'attributo id viene utilizzato nell'HTML. La proprietà id è sempre presente e cambia quando l'attributo cambia. L'uso di prop() sarebbe più veloce, poiché cerca la proprietà sull'elemento e non l'attributo HTML. Come sidenote, tutte le risposte sembrano utilizzare i genitori(), che potrebbero essere molto costosi, a seconda di quanto è grande il DOM. Aggiungere un identificatore di alcuni tipi e usare il più vicino() sarebbe meglio. – adeneo

risposta

20

Puoi provare a utilizzare eq() con parents(). eq() è zero indice di base, quindi il primo elemento avrà indice zero e il terzo elemento avrà indice 2.

$(this).parents().eq(2).attr('id'); 

I .parents() metodo ci permette di cercare attraverso gli antenati di questi elementi nella struttura DOM e costruire un nuovo oggetto jQuery dagli elementi di corrispondenza ordinati da padre immediato su un massimo; gli elementi vengono restituiti in ordine dal genitore più vicino a quelli esterni, Reference

2

si può anche provare.

$(this).parents(':eq(2)'); //and then get ID 
Problemi correlati