2011-08-26 54 views
1

我试图从除了第一个(列标题)表中的所有行使用jQuery选择元素,并为我有这样的选择:jQuery选择返回重复

$("#tableID tr:not(:first)") 

3行,一个对于列标题,以及两个内容,选择返回4,但如果我这样做:

$("#tableID tr") 

它返回三行就好了。我在选择器中遗漏了什么?

我做了一个屏幕截图如果有帮助:http://i52.tinypic.com/317edj9.png

使我有问题的代码是这样的(这是太简单,我不明白为什么它不工作)

function addTableColumn() { 
     var uls = $('#debate ul').length; 
     $('#debate tr:first ').append("<th id='foo'>foo title</th>");  
     $("#debate tr:not(#debate tr:first)").append("<td><ul id='sortable" + (uls+1) + "' class='connectedSortable'></ul></td>").hide().fadeIn("slow"); 
     alert("I'm seeing " + $('#debate tr:not(:first)').length + " rows (without first row), type: " + $('#debate tr:not(:first)')[0] + " but the row count returns (including titles) " + $('#debate tr').length); 
     makeSortable(); 
    } 

回答

5

如果它是一个标题行,我会建议改变您的标记像这样:

<table> 
    <thead> 
     <tr> 
      <th>Title</th> 
      <th>Title</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Content</td> 
      <td>Content</td> 
     </tr> 
     <tr> 
      <td>Content</td> 
      <td>Content</td> 
     </tr> 
     <tr> 
      <td>Content</td> 
      <td>Content</td> 
     </tr> 
    </tbody> 
</table> 

,然后在你的CSS/jQuery的,只有在<tbody>选择<tr> S,它也是更多的语义这个办法。

+1

将标题从tbody中分离出来并生成选择器$('#tableID tbody tr')后,行数很好。谢谢,这让我疯狂! –

-1

$("#tableID tr:not(:first)")工作得很好。

+0

这完全一样吗? – Prisoner

+0

与OP的有何不同? –

+0

好吧,我花了时间来验证这段代码的工作原理..并在那个时候回答了这个问题。是的,这是相同的代码:) – Flob

1

我会用

$('#tableID tr:gt(0)') 

,但你有什么要努力!