2009-06-20 12 views
11

Sto provando a impostare il mio selettore jQuery ma non sono esattamente sicuro di come ho bisogno di scriverlo.Seleziona Nth fratello precedente in jQuery?

Ho una lista non ordinata che sembra qualcosa di simile:

<ul> 
    <li>something</li> 
    <li>something</li> 
    <li>something</li> 
    <li>something</li> 
    <li class="last">something</li> 
</ul> 

Ora so se voglio selezionare l'ultimo figlio posso farlo utilizzando uno "ul li.last" o " ul.li:last "ma diciamo se volevo il secondo all'ultimo, o terzo, o ventesimo? Ora dovrei farlo?

risposta

17

si utilizza eq:

$('ul li').eq(X); 

Dove X è un indice 0-based di cui elemento che si desidera. Si potrebbe anche usare il selector form:

$('ul li:eq(X)'); 

E si potrebbe anche ottenere un risultato simile utilizzando nth-child:

$('ul li:nth-child(X)'); 

La documentazione ha questo da dire circa la differenza tra nth-child e eq:

While: eq (index) corrisponde solo a un singolo elemento, corrisponde a più di uno: uno per ciascun genitore con indice. Multiplo per ogni genitore con pari, dispari o equazione. L'indice specificato è a un indice, in contrasto con: eq() che inizia da zero.

Così facendo $('ul li').eq(19); si otterrebbe il singolo elemento 20 della query abbinata (quindi se c'è più di una lista nel documento questo non porterà "tutti i 19 figli", mentre $('ul li:nth-child(20)'); si otterrebbe l'individuo 20 abbinato lista degli elementi di ogni <ul> nel documento

EDIT:.

fare qualcosa di simile "penultimo", il modo sano per farlo sarebbe come:

var $ul = $('#mylist > li'); 
var $el = $ul.eq($ul.length-2); 

Ma probabilmente si dovrebbe fare un controllo per assicurarsi che la lunghezza-2 non è minore di 0.

0

per il terzo e ventesimo, si può fare ul li:eq(3) e ul li:eq(20). Per penultimo, potresti essere in grado di fare qualcosa con l'opzione argomento nth-childequation, anche se non ne sono sicuro.

0
alert($('ul li').eq(3).text()); 

Ciò avviserà il testo della terza voce dell'elenco.

3

Vuoi il terzo dall'ultimo?

var $ul = $("ul li"); 
$ul.find(":eq(" + Math.max(0, $ul.length - 3) + ")"); 

spiegazione rapida: La lunghezza di $ ul (che è un oggetto jQuery) è come si trovano molti Li. Quindi puoi usarlo insieme al selettore ": eq (n)" per ottenere il li all'indice desiderato.

Ho usato Math.max nel caso in cui l'elenco fosse troppo breve (meno di 3 li).

Questo sarà anche funzionare, ma non è ovviamente il modo migliore:

var $ul = $("ul li:last").prev().prev(); 
Problemi correlati