2009-09-03 171 views
2

我有這樣的選擇:jQuery選擇問題

$("table.details tbody tr:not(.details)") 

但爲什麼這種內在的表被選中過我想知道:

<table class="items details"> 
    <thead> 
     <tr> 
      <th style="width: 90%;">Test application</th> 
      <th style="width: 10%;">Sent to test</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>6456</td> 
      <td>8/29/2009</td> 
     </tr> 
     <tr class="details"> 
      <td colspan="2"> 
       <table> 
        <tr> 
         <td style="width: 100px;">Description:</td> 
         <td>2312313</td> 
        </tr> 
        <tr> 
         <td colspan="2"></td> 
        </tr> 
        <tr> 
         <td>Test URL Test</td> 
         <td><a href="Test2" title="Visit test application">Test2</a></td> 
        </tr>  
       </table> 
      </td> 
     </tr> 
    </tbody> 
</table> 

一個。長度屬性返回6,這是多少總共。

但爲什麼?

+0

整個表是被選中還是僅僅是這張表的TR? – jantimon 2009-09-03 07:23:10

+0

只是TR被選中 – Kordonme 2009-09-03 07:26:00

回答

4

您的選擇器正在選擇所有的後代。因爲你有符合標準的選擇,更多的行http://docs.jquery.com/Selectors

+0

嘗試發佈幾秒後,但.length仍然返回6,它現在正在工作。 – Kordonme 2009-09-03 07:26:57

+4

應該是$(「table.details> tbody> tr:not(.details)」) – redsquare 2009-09-03 07:27:13

+0

Exactually!這固定了它。我看着正在生成的DOM和正確的,內部表也得到一個tbody。像Blixt說的。 – Kordonme 2009-09-03 07:32:14

0

:要選擇直接孩子,用這個:

$("table.details > tbody > tr:not(.details)") 

本節jQuery的文檔將幫助更多。如果您不想選擇它們,則需要在所有內部表格行上設置詳細信息類。

你想要什麼這應該是接近:

$("table.details tbody tr:first"); 
+0

但他可能不想要第一行,並且任何使用nextSibling()方法的遍歷都可能是錯誤的。 – 2009-09-03 07:31:21

+0

這會給我只有一個TR :( – Kordonme 2009-09-03 07:31:43

+0

是的,我一定誤解了一些東西 - 你說你不想嵌套的行,你不想要的行...... – 2009-09-03 07:48:47

2

你選擇的子表的<tr> s比 - 你需要去改變它選擇直接孩子而後裔:

$("table.details > tbody > tr:not(.details)") 

如果<tr>位於<tbody>,<thead><tfoot>之內,則暗示<tbody>元素,因此您還需要<tr>作爲fir的直接後代st <tbody>

1

的選擇之間的間隔覺得作爲通配符:

table.details * tbody * tr:not(.details) 

這會幫助你理解爲什麼被選擇的內表。爲了避免這種情況,請使用上面提到的使用「>」立即後代限定符的解決方案。