Получение итогового значения отфильтрованного поля


Я использую jQuery DataTables для создания таблицы. У меня есть денежное поле, которое я суммирую, и все работает просто отлично, за исключением одного вопроса. Когда я использую фильтр поиска, он дает мне общее количество всех строк. То, что мне нужно, - это общая сумма только строк, возвращенных фильтром. Вот мой код:

var table = $('#tblAdvertising').DataTable({
    "iDisplayLength": 10,
    "bDestroy": true,
    "bLengthChange": false,
    "columnDefs": [
        { "visible": false, "targets": 0 }
    ],
    "drawCallback": function (settings) {
        var api = this.api();
        var rows = api.rows({ page: 'current' }).nodes();
        var last = null;

        api.column(0, { page: 'current' }).data().each(function (group, i) {
            if (last !== group) {
                $(rows).eq(i).before(
                    '<tr class="group"><td colspan="5">' + group + '</td></tr>'
                );

                last = group;
            }
        });
    },
    "footerCallback": function(row, data, start, end, display) {
        var api = this.api();

        var intVal = function(i) {
            return typeof i === 'string' ?
                i.replace(/[$,]/g, '') * 1 :
                typeof i === 'number' ?
                i : 0;
        }

        var total = api.column(3).data().reduce(function(a, b) {
            return intVal(a) + intVal(b);
        });

        var pageTotal = api.column(3, { page: 'current' }).data().reduce(function (a, b) {
            return intVal(a) + intVal(b);
        });

        $(api.column(3).footer()).html('$' + pageTotal.toFixed(2).replace(/d(?=(d{3})+.)/g, '$&,') + '<hr style="margin: 0" />$' + total.toFixed(2).replace(/d(?=(d{3})+.)/g, '$&,'));
    }
});

Проблема, скорее всего, находится в строке, которая начинается с var total =. Я думаю, что мне нужно сделать что-то вроде var total = api.column(3).data().filteredData().... Конечно, это не сработает, но любая помощь будет оценил!

1 2

1 ответ:

В последней строке, где вы используете column(3) , также передайте {'search': 'applied'} (a selector-modifier) для второго аргумента.

var total = api.column(3, {'search': 'applied'}).data().reduce(function(a, b) {