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() {});
编辑
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
变量里面有tr
s,所以用.find('td')
代替parent.
- 在使用
parseInt
表示十进制整数 (ref) 时养成添加基数 10
的好习惯
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() {});
编辑
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
变量里面有tr
s,所以用.find('td')
代替parent.- 在使用
parseInt
表示十进制整数 (ref) 时养成添加基数
10
的好习惯