2013-04-02 12 views
7

Per esempio io ho un <div class="first">, contente altri <div> 's e prima quello selezionato e lo spinse nella variabilejquery: uso (“padre> figlio”) con le variabili

variable = $('div.first') 

E ora voglio qualcosa di simile

$(variable + " > div") 

so, sembra stupido ma se avevo un array, contente righe della tabella e devo accedere alle colonne all'interno di una riga specifica:

var tableRows = $('table > tbody > tr'); 
var tableBodyCols = $(tableRows[i]+'> td'); // Doesn't work :(

risposta

14

Usa .children()

var tableBodyCols = tableRows.children('td'); 

O un selettore di contesto:

var tableBodyCols = $('> td', tableRows); 

Entrambi sono equivalenti, ma il primo è più facile da leggere imho.

Ecco un fiddle dimostrando entrambi.


E per iterare su tutti i giochi di bambini di fila each tabella:

tableRows.each(function() { 
    var tableBodyCols = $(this).children('td'); 
    //... 
}); 

Ma se davvero preferisce un ciclo for o è necessario per ottenere le colonne di una riga specifica, quindi eq è tuo amico .

for (var i = 0; i < tableRows.length; i++) { 
    var tableBodyCols = tableRows.eq(i).children('td'); 
    //... 
} 

Ecco l'aggiornamento fiddle.

+0

il primo è molto più efficiente troppo – Alnitak

+0

@Alnitak Sì ben notare, non crea un nuovo oggetto jQuery da zero troppo. '=]' –

+0

Il mio inglese è cattivo, e stavo pensando che il selettore 'children()' selezioni solo il primo figlio (pensavo che "children" fosse una forma singolare di "childrens"). Comunque, grazie mille. Il selettore di contesto sembra molto carino. – tumoxep

0

Per ottenere le cellule della fila di indice di i, si possono utilizzare

var tableBodyCols = $('td', tableRows[i]); 

Se davvero può avere più di un livello di td, utilizzare

var tableBodyCols = tableRows.eq(i).children('td'); 

o utilizzare il dom nativo oggetto:

var tableBodyCols = tableRows[i].cells; 
+0

che per prima cosa non è strettamente una ricerca 'genitore> bambino 'ma un' .find() '. Il terzo è anche ora solo un array, non una collezione jQuery ... ;-) – Alnitak

0

Se si desidera tutto<td> celle, utilizzare:

var tableBodyCols = tableRows.children('td'); 

Se si desidera solo quelli per un specifica fila i:

var tableBodyCols = tableRows.eq(i).children('td'); 

dove i inizierà da zero per la prima riga.

1

Non è possibile eseguire $(variable + " > div") perché variable non è una stringa ma un elemento jquery.

Ma si può provare:

variable.children("div");