Si può fare in vari modi ma dipende essenzialmente dal tipo di dati dell'array e da ciò che si vuole ottenere.Non dovrebbe essere x = $(array)[2];?
Cerco di chiarire con qualche esempio:
Supponiamo di avere questi elementi html sulla pagina:
L'ordine delle lettere è invertito di proposito per comprendere meglio alcune differenze.codice HTML:<div id="c">c</div> <div id="b">b</div> <div id="a">a</div>
- Array di elementi DOM e metodo get()
Al selettore jQuery passiamo un array di elementi, cioè una serie di elementi DOM validi.codice:var selettore = [document.getElementById('a'), document.getElementById('b'), document.getElementById('c')]; var x = $(selettore).get(2); x.innerHTML = 'x'; /* --- OUTPUT --- x b a -----------------*/
Il selettore, di per sè, restituisce una collezione di oggetti jQuery che rappresentano gli elementi trovati ordinandoli secondo i criteri di ricerca, cioè esaminando, di volta in volta, le singole voci dell'array secondo l'ordine in cui queste sono disposte sull'array stesso.
Il get() filtra uno di questi oggetti e lo restituisce in forma di elemento DOM. In particolare, get(2) fa riferimento al terzo oggetto trovato che corrisponde a <div id="c"> in base all'ordine degli elementi nell'array.
Il metodo get() restituisce un elemento DOM per cui ho dovuto utilizzare innerHTML (che è una proprietà javascript) piuttosto che html() (che è un metodo jQuery, applicabile solo ad oggetti jQuery e non ad elementi del DOM).
- Array di stringhe e metodo get()
Avendo un array di stringhe (che rappresentano dei selettori) possiamo convertirlo in un'unica stringa da passare al selettore. Nell'esempio selettore.join(',') restituisce la stringa '#a,#b,#c'.codice:var selettore = ['#a','#b','#c']; var x = $(selettore.join(',')).get(2); x.innerHTML = 'x'; /* --- OUTPUT --- c b x -----------------*/
Il selettore restituisce sempre (e comunque) degli oggetti jQuery. In questo caso però gli oggetti sono restituiti nell'ordine in cui si presentano sul documento. Questo perché il criterio di ricerca è rappresentato da un'unica stringa che viene esaminata per intero durante la ricerca.
Il get(2) restituisce quindi l'elemento <div id="a"> che è l'ultimo trovato durante la ricerca.- Array di elementi DOM e metodo eq()
Il selettore è uguale al primo esempio ma il metodo eq() restituisce un oggetto jQuery, a differenza di get() che restituisce un elemento DOM.codice:var selettore = [document.getElementById('a'), document.getElementById('b'), document.getElementById('c')]; var x = $(selettore).eq(2); x.html('x'); /* --- OUTPUT --- x b a -----------------*/
Per questo motivo posso usare il metodo html().
- Array di stringhe e metodo eq()
Stessa storia per il selettore di tipo stringa (esempio 2) e stessa storia per ciò che viene restituito da eq() (esempio 3).codice:var selettore = ['#a','#b','#c']; var x = $(selettore.join(',')).eq(2); x.html('x'); /* --- OUTPUT --- c b x -----------------*/
- Singola voce di array come selettore
Qui veniamo al dunque. Rispetto ai precedenti esempi, non utilizzo ulteriori metodi (get, eq) per filtrare la collezione di oggetti trovata. In questo caso mi limito a "filtrare" preventivamente ciò che voglio cercare, semplicemente specificando una sola voce dell'array come criterio di ricerca.codice:var selettore = [document.getElementById('a'),'<div id="#b">','#c']; var x = $(selettore[2]); x.html('x'); /* --- OUTPUT --- x b a -----------------*/
Dal momento che comunque sto passando una sola voce, l'array può avere voci in qualsiasi formato.
Il selettore restituisce un solo oggetto (ovviamente se la voce fa riferimento ad un unico elemento).
Non ho motivo di filtrare ulteriormente la collezione risultante ed ho, quindi, un risparmio delle risorse.
Posso usare tranquillamente il metodo html() sull'oggetto restituito.
A meno che non mi interessi avere una collezione di tutti gli elementi (riferiti a tutte le voci dell'array), questo mi sembra il metodo più ottimale.


Rispondi quotando