2014-04-25 21 views
1

爲什麼我必須做的:的爲什麼我不能在jQuery中的一個選擇器中獲得所有第一個td?

$('.inout tbody').find('tr:first td:first') 
//return => Object[td, td, td, td] 

代替

$('.inout tbody tr:first td:first') 
//return => Object[td] 

爲什麼簡化版,具有相同的結果呢?這是僞元素「:第一個」的問題?

編輯AWNSER:

事實迴應是:先=:第一胎;)

$('.inout tbody tr:first-child td:first-child')// works ! 
+0

什麼是你的標記是什麼樣子?頁面上有多少個表格? – Pointy

回答

6

:first返回堆棧中的第一要素!我想你正在尋找每個第一個孩子。

嘗試這種情況:

$('.inout tbody tr:first-child td:first-child') 

參考:

:first-child Selector

雖然:first匹配僅單個元件,所述:first-child選擇器可以匹配多於一個:一個用於每個家長。這相當於:nth-child(1)

+0

不...我想要所有的第一個td,在我的所有表(.inout)的第一行(tr) 因此:首先在tr上是需要的! 「$('。inout tbody')。find('tr:first td:first')」給我很好的輸出,但我不明白爲什麼必須這樣做2次... – Matrix

+2

@Matrix所以,使用'tr:first-child'來代替。可以有許多「:第一個孩子」,但只有一個「:第一個」。 – canon

+1

我想他希望每個表的第一個''中的第一個'​​'。這就是'.find()'版本正常工作的原因:它重複搜索每個表格主體。 – Pointy

-1

,因爲你的第二選擇將選擇:

.inout > tbody > tr:first > td:first' 

您應將其更改爲:

$('.inout tbody tr:first , .inout tbody td:first') 
+0

該結果集將包含'tr'和'td'元素...這不是所需的輸出。 – canon

+0

+1,這不是我想要的 – Matrix

1

你問不同的東西:

$('.inout tbody').find('tr:first td:first') 

正在請求$('.inout tbody')中每個元素的第一個tr的第一個td

$('.inout tbody tr:first td:first') 

儘管這是問了所有的人都爲第一tr的第一td


下選擇將返回第一TDS的數組:

$('.inout tbody tr:first-child td:first-child'); 

This jsFiddle may be useful for verifying this

相關問題