2013-04-02 10 views
7

Zum Beispiel habe ich ein <div class="first"> containig andere <div> ‚s und ausgewählte erste und schob ihn in variablejquery: Verwendung („parent> Kind“) mit Variablen

variable = $('div.first') 

Und nun möchte ich so etwas wie dieses

$(variable + " > div") 

ich weiß, es scheint dumm, aber was ist, wenn ich hatte eine Reihe containig Tabellenzeilen und ich brauche, um Spalten Zugriff innerhalb einer bestimmten Zeile:

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

Antwort

14

Verwenden .children()

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

Oder ein Kontext-Selektor:

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

Beide sind gleichwertig, aber das erstere ist leichter imho zu lesen.

Hier ist eine fiddle demonstriert beides.


Und alle Sätze von Kindern each Tabellenzeile iterieren:

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

Aber wenn Sie wirklich eine for Schleife bevorzugen oder benötigen Sie eine bestimmte Zeile Spalten zu bekommen, dann eq ist dein Freund .

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

Hier ist die aktualisierte fiddle.

+0

erstere ist viel effizienter zu – Alnitak

+0

@Alnitak Ja schön erwähnt, ist es nicht ein neues jQuery-Objekt von Grund auf neu zu erstellen. '=]' –

+0

Mein Englisch ist schlecht, und ich dachte, dass 'children()' Selektor nur das erste Kind auswählt (ich dachte "Kinder" ist eine Singularform von "childrens"). Wie auch immer, vielen Dank. Der Kontext-Selektor sieht sehr gut aus. – tumoxep

0

Um die Zellen der Reihe von Index i, erhalten Sie

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

Wenn Sie wirklich haben mehr als eine Ebene von td verwenden

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

oder verwenden Sie die native dom verwenden Objekt:

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

das erste ist nicht streng eine "Eltern> Kind" Suche, sondern eine '.find()'. Die dritte ist jetzt auch nur ein Array, keine jQuery-Sammlung ... ;-) – Alnitak

0

Wenn Sie wollen alle<td> Zellen verwenden:

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

Wenn Sie nur die für eine Reihe spezifischen wollen i:

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

wo i von Null für die erste Zeile beginnt.

1

Sie können nicht tun, weil variable keine Zeichenfolge, sondern ein jquery-Element ist.

Aber Sie können versuchen:

variable.children("div");