DataTables.Net выдает сумму для 7 столбцов

Прочитав вики DataTables.net, я узнал, как добавить итог в один столбец, столбец 4 в приведенном ниже синтаксисе, поэтому я уверен, что кто-то с большим опытом работы с JQuery может легко адаптироваться, чтобы показать итог для столбцов 6-12 для меня.

Это базовая установка для добавления итога для столбца 4 — что нужно изменить, чтобы добавить итог для дополнительного столбца?

https://datatables.net/examples/advanced_init/footer_callback.html

    $(document).ready(function() {
    $('#example').DataTable( {
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api(), data;

            // Remove the formatting to get integer data for summation
            var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[\$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
            };

            // Total over all pages
            total = api
                .column( 4 )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );

            // Total over this page
            pageTotal = api
                .column( 4, { page: 'current'} )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );

            // Update footer
            $( api.column( 4 ).footer() ).html(
                '$'+pageTotal +' ( $'+ total +' total)'
            );
        }
    } );
} );

person BellHopByDayAmetuerCoderByNigh    schedule 10.08.2017    source источник


Ответы (1)


Некоторый быстрый рефакторинг позволяет вызывать функцию с любым номером столбца. Вы заметите, что я:

  1. обернули то, что раньше работало для column 4, в функцию с одним параметром, представляющим столбец для суммирования colNum.
  2. Затем я заменил все вхождения на 4 в новой функции на colNum и
  3. приступил к вызову вновь созданной функции после ее определения.

$(document).ready(function() {
  $('#example').DataTable({
    "footerCallback": function(row, data, start, end, display) {
      var api = this.api(),
        data;

      // Remove the formatting to get integer data for summation
      var intVal = function(i) {
        return typeof i === 'string' ?
          i.replace(/[\$,]/g, '') * 1 :
          typeof i === 'number' ?
          i : 0;
      };
      var totalColumn = function(colNum) {
        // Total over all pages
        total = api
          .column(colNum)
          .data()
          .reduce(function(a, b) {
            return intVal(a) + intVal(b);
          }, 0);

        // Total over this page
        pageTotal = api
          .column(colNum, {
            page: 'current'
          })
          .data()
          .reduce(function(a, b) {
            return intVal(a) + intVal(b);
          }, 0);

        // Update footer
        $(api.column(colNum).footer()).html(
          '$' + pageTotal + ' ( $' + total + ' total)'
        );
      }
      totalColumn(6);
      totalColumn(7);
      //...snip...
    }
  });
});

person Steve0    schedule 10.08.2017
comment
Это полный синтаксис или просто пример? Я спрашиваю, что фрагмент кода запуска bc выдает ошибку - person BellHopByDayAmetuerCoderByNigh; 10.08.2017
comment
фрагмент понятия не имеет, что такое datatables.net, плюс вы не предоставили html или другие источники. фрагмент не будет работать в этой среде. Это просто пример. - person Steve0; 10.08.2017
comment
запуск этого в моей рабочей среде дает мне ошибку: Uncaught TypeError: Cannot read property 'nTf' of undefined в t.‹anonymous› (datatables.min.js:199) в t.iterator (datatables.min.js:175 ) в t.‹anonymous› (datatables.min.js:199) в t.‹anonymous› (datatables.min.js:179) в t.footer (datatables.min.js:178) в totalColumn (ar-detail -summary:483) в n.fn.init.footerCallback (ar-detail-summary:491) в datatables.min.js:150 в Function.map (datatables.min.js:14) в s (datatables.min. js:150) - person BellHopByDayAmetuerCoderByNigh; 10.08.2017
comment
При устранении неполадок я удалил элемент ‹footer›‹/footer› из своей таблицы. Как только я добавил, что код работал так, как ожидалось. - person BellHopByDayAmetuerCoderByNigh; 11.08.2017