2013-04-02 30 views
7

比如我有一個<div class="first"> containig其他<div>的和選擇的第一個,把他推變量jQuery的:使用(「父>子」)與變量

variable = $('div.first') 

現在我想是這樣的

$(variable + " > div") 

我知道,這似乎是愚蠢的,但如果我有一個數組containig錶行,我需要訪問特定的行內列:

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

回答

14

使用.children()

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

或上下文選擇:

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

兩者都是等價的,但前者更容易閱讀恕我直言。

這裏有一個fiddle展示兩者。


並遍歷each錶行的所有兒童組:

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

但如果你真的喜歡for循環,或者你需要獲得特定行的列,那麼eq是你的朋友。

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

這裏是更新的fiddle

+0

前者是更有效的太 – Alnitak

+0

@Alnitak是很好地注意到,它並沒有從頭創建一個新的jQuery對象了。 '=]' –

+0

我的英語不好,我在考慮'children()'選擇器只選擇第一個孩子(我認爲「孩子」是單數形式的「孩子」)。不管怎樣,非常感謝。上下文選擇器看起來很好。 – tumoxep

0

要獲得指數i的行的單元格,你可以使用

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

如果你真的可能有td不止一個層次,使用

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

或使用本機的DOM物體:

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

首先不是嚴格的'父>子'搜索,而是'.find()'。第三個也是現在只是一個數組,而不是一個jQuery集合... ;-) – Alnitak

0

如果你想要全部<td>細胞,使用方法:

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

如果你想只有那些對特定i

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

其中i將從零開始第一行。

1

你不能這樣做$(variable + " > div"),因爲variable不是一個字符串,而是一個jQuery元素。

不過你可以試試:

variable.children("div");