jQuery tablesorter 仅对 child 行进行分组小计

jQuery tablesorter grouping subtotals for child rows only

我需要在 table 的组 header 行中显示组小计。除了数学,一切都很好。在每个组中,我扩展了 parent 行,其中包含该 parent 的所有 child 行的总数。当我对我的组进行总计时,它会将所有 parent 和 child 行加在一起,总计是我要查找的数字的 2 倍。有没有办法只添加 child 行,或者只添加 parent 行?这是我目前所拥有的:

group_callback: function($cell, $rows, column, table) {
   if (column === column) {
      var t, successesTotal = 0;
      $rows.each(function() {
            successesTotal += parseInt($(this).parent('td').eq(successesColumn).text());
});

我尝试了几种看似合乎逻辑的不同方法,但其中 none 似乎行得通。

successesTotal += parseInt($(this).find('tbody tr.tablesorter-childRow td').eq(successesColumn).text());

没用。也没有:

$rows.each(function() {
     if ($('tr').hasClass('tablesorter-childRow')) {
         successesTotal += parseInt($(this).parent('td').eq(successesColumn).text());
 });

我非常接近完全按照我的需要完成这项工作,但我仍然需要从计算中排除 parent 行,这将是完美的。在所附图片中,粗体线是 parent 行,显示其 child 行的总计。成功应该是 165,总行应该是 6(或 2,无论哪种方式都适合我!)我现在已经花了将近 2 整天的时间来解决这个问题。任何建议,将不胜感激!!

根据要求,这里是 table HTML(为简化而修改):

<table class="tablesorter">
   <thead>
     <th class="group-word">Column1</th>
     <th class="group-false filter-parsed">Column2</th>
     <th class="group-false filter-parsed">Column3</th>
   </thead>
   <tbody>
      <tr>
         <td>Category1</td>
         <td><a href="#" class="toggle">Category2</a></td>
         <td>Subtotal1</td>
      </tr>
      <tr class="tablesorter-childRow">
         <td>ChildData1</td>
         <td>ChildData2</td>
         <td>ChildData3</td>
      </tr>
      <tr class="tablesorter-childRow">
         <td>ChildData1</td>
         <td>ChildData2</td>
         <td>ChildData3</td>
      </tr>
  </tbody>

我想用 ChildData3 添加 ChildData3。我需要排除 SubTotal1。

与其循环遍历 table 中的每一行,您可以尝试像这样循环遍历子行

$('.tablesorter-childRow').each(function() {});

编辑

Check out this JSFiddle

group_callback 中的 $rows 参数提供父行和所有子行,因此您需要过滤掉其中一个。

// only target child rows
$rows.filter('.tablesorter-childRow')

这是来自 this demo

的代码
var successesColumn = 0;
$("#table").tablesorter({
  theme: "blue",
  widgets: ["group", "filter", "zebra"],
  widgetOptions: {
   group_collapsible : true,
    group_callback: function($cell, $rows, column, table) {
      if (column === successesColumn) {
        var t, successesTotal = 0;
        $rows.filter('.tablesorter-childRow').each(function() {
          successesTotal += parseInt($(this).find('td').eq(successesColumn).text(), 10);
        });
        $cell.find(".group-count").append("; Successes: " + successesTotal );
      }
    }
  }
});

其他修复:

  • $rows变量里面有trs,所以用.find('td')代替parent.
  • 在使用 parseInt 表示十进制整数 (ref)
  • 时养成添加基数 10 的好习惯