2009-09-03 2 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> 

.length свойство возвращает 6, которое является числом в итоге.

Но ПОЧЕМУ?

+0

Отображается ли вся таблица или только TR этой таблицы? – jantimon

+0

Только выбранные TRs – Kordonme

ответ

4

Вы выбираете все потомки. Для того, чтобы выбрать непосредственные дети, используйте:

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

Этот раздел в документации JQuery поможет больше: http://docs.jquery.com/Selectors

+0

Пробовал это через несколько секунд после публикации, но .length по-прежнему возвращает 6, и теперь он работает. – Kordonme

+4

должно быть $ ("table.details> tbody> tr: not (.details)") – redsquare

+0

Точно! Это фиксировало это. И я посмотрел на DOM, созданный и правильный, внутренняя таблица тоже получает труп. Как сказал Блик. – Kordonme

0

Поскольку у вас есть несколько строк, которые соответствуют критериям селектора. Вам нужно будет установить класс данных во всех внутренних строках таблицы, если вы не хотите, чтобы они были выбраны.

Это должно быть ближе к тому, что вы хотите:

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

Но он может не хотеть только первую строку, и любое перемещение с использованием метода nextSibling() может быть неправильным. –

+0

Это дало бы мне только один TR :( – Kordonme

+0

Да, я, должно быть, неправильно понял что-то, вы сказали, что вам не нужны вложенные строки, и вам не нужна строка thead ... –

2

Ваш селектор соответствует подтаблица в <tr> с - вам необходимо изменить его, чтобы выбрать прямые детей вместо потомков:

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

A <tbody> элемент подразумевается, если <tr> находится внутри <tbody>, <thead> или <tfoot>, поэтому вам также нужны <tr> s, чтобы быть прямыми потомками пихты st <tbody>.

1

Think пространств между селекторов как подстановочные знаки:

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

Это поможет вам понять, почему выбран внутренний стол. Чтобы этого избежать, используйте вышеприведенные решения, в которых используется спецификатор «>» с непосредственным потомком.

Смежные вопросы