我距离实现我想要的东西非常接近,只需要一点帮助。
我已经实现了分组。现在我想为每个组求和并在组头部显示总数。这是一个 jsfiddle 示例,因为它更容易展示我想做什么:
http://jsfiddle.net/RgKPZ/123/
相关代码:
$(function() {
oTable = $('#job_history').dataTable({
"aoColumnDefs": [
{ "bVisible": false, "aTargets": [ 4,5,6 ] },
],
"aLengthMenu": [[10, 25, 50, -1], ["Show 10 entries", "Show 25 entries", "Show 50 entries", "Show all entries"]], // options in the show rows selector
"iDisplayLength" : -1, // show all rows by default
"aaSortingFixed": [[ 5, 'asc' ]],
"aaSorting": [[ 5, 'asc' ]],
"bJQueryUI": true,
"sDom": '<flip>', // filter, length, info, pagination
"oLanguage": {
"sSearch": "", // label for search field - see function below for setting placeholder text
"sLengthMenu": "_MENU_", // label for show selector { "sLengthMenu": "Display _MENU_ jobs" }
"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries.", // string for information display
"sInfoEmpty": "No entries to show", // what to show when info is empty
"sInfoFiltered": " (Filtering from _MAX_ entries.)",
"sEmptyTable": "There are no entries matching the search criteria.", // shown when table is empty, regardless of filtering
"sZeroRecords": "", // shown when nothing is left after filtering
},
"fnDrawCallback": function ( oSettings ) {
if ( oSettings.aiDisplay.length == 0 )
{
return;
}
var nTrs = $('#job_history tbody tr'); // get all table rows
var iColspan = nTrs[0].getElementsByTagName('td').length;
var sLastGroup = "";
var summed_minutes = 0;
for (var i = 0; i < nTrs.length; i++)
{
var iDisplayIndex = oSettings._iDisplayStart + i;
var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[ 5 ];
if ( sGroup != sLastGroup )
{
var nGroup = document.createElement( 'tr' );
var nCell = document.createElement( 'td' );
nCell.colSpan = iColspan;
nCell.className = "group";
summed_minutes += oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[ 7 ];
nCell.innerHTML = sGroup + summed_minutes;
nGroup.appendChild( nCell );
nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
sLastGroup = sGroup;
}
}
}
});
});
唯一的问题是,我想要求和的列没有被正确地相加。这些值被显示,但像字符串一样显示而不是像数字一样相加。而且,并非所有的值都被显示为字符串 - 有一些重复的情况发生。我尝试使用Number()和parseInt()进行转换,但没有成功。我正在尝试将这个函数放入回调函数中(就像分组函数一样),以便在每次表格过滤后也可以对值进行求和。
我确定只是变量名写错了或者位置不对之类的小错误,但我就是找不出来。真是郁闷! :-(
TIA, Matt
$("table tr td:nth-child(4)").each(function() { total += parseFloat($(this).text()); });
- Lakshmana Kumar