2011-10-25 73 views
1

我的DOM如下:http://jsfiddle.net/pimvdb/AHJXk/1/第n個孩子和後代選擇器沒有選擇所有預期的元素

<table> 
    <tr> 
     <td> 
      <input type="text"><input type="text"> 
     </td> 
     <td> 
      <input type="text"><input type="text"> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input type="text"><input type="text"> 
     </td> 
     <td> 
      <input type="text"><input type="text"> 
     </td> 
    </tr> 
</table> 

我想在每個tr的第二td,即總共四個選擇所有input秒。我想下面的選擇將工作:

$('table tr td:nth-child(2) input') 

但它只返回每個第二td(共2)的第一input。這是爲什麼?如果我做的:

$('table tr td:nth-child(1) input') 

話,我確實得到所有input s各自第一td(共四個)的。

那麼爲什麼:nth-child(2)不是全部返回input s,而只是第一個匹配td

+0

嘗試在其他瀏覽器。恭喜 - 您發現了一個webkit bug!它適用於Firefox,Opera和IE,但不適用於Chrome。 –

+0

@jamietre:這確實是我正在使用的Chrome。事實上,我現在發現它*有時可以工作,有時*不會。這很奇怪......無論如何,在CSS中使用它總是如此,所以猜測它確實是某種錯誤。謝謝! – pimvdb

+0

強迫Sizzle選擇修復錯誤(如預期),所以我會提交一個錯誤報告,我猜。 http://jsfiddle.net/pimvdb/AHJXk/4/ – pimvdb

回答

1

這將讓你他們四個:

$('input','table tr td:nth-child(2)') 

小提琴:http://jsfiddle.net/AHJXk/3/

+0

確實,你是對的。你碰巧知道爲什麼?我不太明白這是什麼區別(除了這個是當然的)。 – pimvdb

+0

@pimvdb我不完全確定我自己。 – Neal