Я так близок к тому, чтобы получить именно то, что хочу, просто нужно немного помочь.jquery datatables - сумма столбцов внутри группы
У меня есть группировка. Теперь я хочу суммировать столбцы для каждой группы и отображать общее количество в заголовке группы. Вот 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(), но не повезло. Я пытаюсь включить это в функцию обратного вызова (например, функцию группировки), чтобы значения были суммированы после каждого фильтра таблицы.
Уверен, что у меня просто переменная неправильная или не в том месте или что-то в этом роде, но я просто не могу понять это. Разочарочно близко! :-(
ТИА, Matt
, для которого колонка u хочет общее количество и какие группы? –
Для добавления всех ячеек в 5-ом столбцах используйте это '$ (" table tr td: nth-child (4) "). each (function() { total + = parseFloat ($ (this) .text()); }); ' –
Спасибо за помощь. Я ближе, но все еще не совсем там. Я обновил свой jsfiddle, чтобы показать, где я сейчас. http://jsfiddle.net/RgKPZ/126/ – Matt