2012-02-26 142 views
5

我试图让jQuery Tablesorter插件使用嵌套表,其中内部和外部表都是可排序的。外表的每一行通常都包含一个按钮,当点击该按钮时,会在其下方的行中显示一个隐藏的内表(尽管为简单起见,我在下面的HTML中跳过了按钮,使所有内容都可见)。嵌套jQuery Tablesorter表,所有可排序

内部表格与一个“expand-child”类相连,它告诉Tablesorter在排序时使其保持在正上方的行上。这主要起作用,但外表表头在单击时没有正确突出显示,而内表完全没有正确排序。

我知道关于this SO question,并且一种解决方案是禁用内表上的排序,但我特别希望外表和内表都是可排序的。

我的HTML如下,我也创建了一个jsfiddle显示该问题。谢谢你的帮助。

<table class="tablesorter"> 
    <thead> 
     <tr> 
      <th>Make</th> 
      <th>Model</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Honda</td> 
      <td>Accord</td> 
     </tr> 
     <tr class="expand-child"> 
      <td colspan="2" style="padding: 0 30px 0 30px;"> 
       <table class="tablesorter"> 
        <thead> 
         <tr> 
          <th>Doors</th> 
          <th>Colors</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr> 
          <td>Honda 2-Door</td> 
          <td>Honda Red</td> 
         </tr> 
         <tr> 
          <td>Honda 4-Door</td> 
          <td>Honda Blue</td> 
         </tr> 
        </tbody> 
       </table> 
      </td> 
     </tr> 
     <tr> 
      <td>Toyota</td> 
      <td>Camry</td> 
     </tr> 
     <tr class="expand-child"> 
      <td colspan="2" style="padding: 0 30px 0 30px;"> 
       <table class="tablesorter"> 
        <thead> 
         <tr> 
          <th>Doors</th> 
          <th>Colors</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr> 
          <td>Toyota 2-Door</td> 
          <td>Toyota Yellow</td> 
         </tr> 
         <tr> 
          <td>Toyota 4-Door</td> 
          <td>Toyota Green</td> 
         </tr> 
        </tbody> 
       </table> 
      </td> 
     </tr> 
    </tbody> 
</table> 

回答

5

我已付出你的jsfiddle,并选择更新,以便它作为订单我想你想它... http://jsfiddle.net/P2DsY/

你可以从我的叉子,你只是需要具体与表见分拣机插件配置。

+0

完美,谢谢!在使用jsfiddle之后,我发现唯一需要改变的是添加tablesorter参数{selectorHeaders:'> thead> tr> th'}。默认值是'thead th',我现在意识到这会导致一个问题,因为外部表格最终选择元素一直到内部表格。 >标志使它只能看到它的直接孩子,而不是所有的后代。我想知道你的是否应该是tablesorter的默认值。无论如何,再次感谢! – 2012-02-26 18:26:31

+0

当我尝试禁用第一列标题上的排序时,我遇到了另一个问题。如果添加“标题:{0:{sorter:false}}”,则会禁用所有表格的第一列,即使是嵌套表格也是如此。要单独禁用它们,请将内联元数据添加到元素中:class =“{sorter:false}”(并且包含jquery.metadata.js,正如tablesorter文档所说的那样)。 – 2012-03-30 22:44:39

+0

做了些什么改变?当我点击小提琴中的表头时,它不会保持父子关系。 – 2013-03-12 02:31:32