Come ottenere l'ennesimo elemento jQuery


311

In jQuery, $("...").get(3)restituisce il terzo elemento DOM. Qual è la funzione per restituire il terzo elemento jQuery?

Risposte:


310

Perché non navigare prima nella pagina dei selettori (brevi)?

Eccolo: l' :eq()operatore. È usato esattamente come get(), ma restituisce l'oggetto jQuery.

Oppure puoi usare .eq()anche la funzione.


23
Non dovrebbe essere quello .eq()invece di :eq()?
RubenGeert,

15
Sì, .eq()è più appropriato per la domanda del PO. :eq()viene utilizzato all'interno del parametro string per $, mentre .eq()è un metodo su un oggetto jQuery esistente.
mjswensen,

55
Giuro che devo andare a cercarlo ogni volta . singolo . tempo .
Ivarni,

3
@JoelWorsham Dipende dal comportamento desiderato. $('select').find('option').eq(n)fondamentalmente ignorerà il raggruppamento e otterrà tutte le opzioni nel loro insieme. Se lo vuoi per gruppo, è necessario qualcosa del genere:$('select').find('optgroup').each(function() { $(this).find('option').eq(n)...; })
Dykam

4
"Perché non navigare prima nella pagina dei selettori (brevi)?" - Perché "eq" è un nome molto brutto e lo
ignoro

309

È possibile utilizzare il selettore : eq , ad esempio:

$("td:eq(2)").css("color", "red"); // gets the third td element

O la funzione eq (int) :

$("td").eq(2).css("color", "red");

Inoltre, ricorda che gli indici sono a base zero.


7
Come sinonimo, puoi anche usare il :nth()selettore - da non confondere con:nth-child()
user123444555621

La risposta migliore e non modificata 3 anni dopo il fatto :)
Andrew,

grazie per aver effettivamente spiegato come utilizzare il selettore / la funzione
Joseph Rogers,

49

se si ha il controllo sulla query che crea l'oggetto jQuery, utilizzare :eq()

$("div:eq(2)")

Se non hai il controllo su di esso (ad esempio, viene passato da un'altra funzione o qualcosa del genere), quindi utilizzare .eq()

var $thirdElement = $jqObj.eq(2);

O se ne vuoi una sezione (diciamo, il terzo, il quarto e il quinto elemento), usa .slice()

var $third4th5thElements = $jqObj.slice(2, 5);

Stava cercando slice, ma non era sicuro di come cercare. Grazie per andare oltre quanto richiesto nella domanda originale.
Samik R,

4
Per le persone che si imbattono in questa risposta, un utile punto da notare è che il selettore nth-child è 1 basato mentre: eq o .eq () sono basati su 0
Sudhanshu Mishra

1
Dovresti usare .eq()invece di :eq()effettivamente. Leggero aumento delle prestazioni.
Qwerty,

13

Penso che tu possa usare questo

$("ul li:nth-child(2)").append("<span> - 2nd!</span>");

Trova il secondo li in ogni ul corrispondente e lo nota.


11

.eq () -Un numero intero che indica la posizione in base 0 dell'elemento.

Ex:

Considera una pagina con un semplice elenco su di essa:

<ul>
<li>list item 1</li>
<li>list item 2</li>
<li>list item 3</li>
<li>list item 4</li>
</ul>

Possiamo applicare questo metodo all'insieme di voci di elenco:

$( "li" ).eq( 2 ).css( "background-color", "red" );

Per maggiori informazioni: .eq ()


3

Se hai già l'oggetto jquery in una variabile, puoi anche trattarlo come un normale array indicizzato, senza l'uso di jquery:

var all_rows = $("tr");
for(var i=0; i < all_rows.length; i++){
   var row = all_rows[i];
   //additionally, you can use it again in a jquery selector
   $(row).css("background-color","black");
}

Sebbene l'esempio sopra non sia utile in alcun modo, rappresenta come è possibile trattare gli oggetti creati da jquery come array indicizzati.


Bene, e un altro suggerimento (si spera utile): se la riga contiene un elenco di <select>elementi e si desidera l'elemento combobox selezionato, utilizzare$(row).val();
Matt

2

Se capisco correttamente la tua domanda, puoi sempre semplicemente avvolgere la funzione get in questo modo:

var $someJqueryEl = $($('.myJqueryEls').get(3));

3
Questo è solo il "modo difficile" e questo è ciò che eq()ti dà gratuitamente.
Caumons,

1

Se vuoi recuperare un particolare elemento / nodo o tag in loop per es

<p class="weekday" data-today="monday">Monday</p>
<p class="weekday" data-today="tuesday">Tuesday</p>
<p class="weekday" data-today="wednesday">Wednesday</p>
<p class="weekday" data-today="thursday">Thursday</p>

Quindi, dal ciclo di codice dall'alto viene eseguito e vogliamo selezionare un campo particolare per questo, dobbiamo usare la selezione jQuery che può selezionare solo l'elemento in attesa dal ciclo sopra, quindi il codice sarà

$('.weekdays:eq(n)');

per esempio

$('.weekdays:eq(0)');

così come con altri metodi

$('.weekday').find('p').first('.weekdays').next()/last()/prev();

ma il primo metodo è più efficiente quando HTML <tag>ha un nome di classe univoco.

NOTA: il secondo metodo viene utilizzato quando non è presente un nome di classe nell'elemento o nel nodo di destinazione.

per di più segui https://api.jquery.com/eq/


0

Per le iterazioni l'uso di un selettore non sembra avere alcun senso però:

var some = $( '...' );

for( i = some.length -1; i>=0; --i )
{
   // Have to transform in a jquery object again:
   //
   var item = $( some[ i ] );

   // use item at will
   // ...
}

0

Esempio live per accedere e rimuovere l'ennesimo elemento con jQuery:

<html>
<head></head>
<body>
    <script type="text/javascript" 
    src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $('li:eq(1)').hide();
      });
    </script>
    <ol>
      <li>First</li>
      <li>Second</li>
      <li>Third</li>
    </ol>
</body>
</html>

Quando viene eseguito, ci sono due elementi nell'elenco ordinato che mostrano, Primo e Terzo. Il secondo era nascosto.


PS: il conteggio inizia da 0; Il primo è all'indice 0, il secondo è all'indice 1 e così via ....
KNU,

0
 $(function(){
            $(document).find('div').siblings().each(function(){
                var obj = $(this);
                obj.find('div').each(function(){
                    var obj1 = $(this);
                    if(!obj1.children().length > 0){
                        alert(obj1.html());
                    }
                });

            });
        });

<div id="2">
    <div>
        <div>
            <div>XYZ Pvt. Ltd.</div>
        </div>
    </div>
</div>
<div id="3">
    <div>
        <div>
            <div>ABC Pvt Ltd.</div>
        </div>
    </div>
</div>

"$ (function () {" prima dell'autunno, ho creato una funzione anonima, che si è attivata automaticamente. All'interno ho trovato tre div genitori usando i fratelli. Poi ho ripetuto i 3 div genitori e ho verificato la lunghezza di ogni figlio. Come posso identificare se si tratta di un ultimo div o meno nel div genitore. Ora sto avvisando l'ultimo div html di ogni 3 div genitore principale
Sanjay Verma

Puoi modificare la tua risposta, invece di fornire informazioni nei commenti :)
T3 H40,
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.