Javascript 带有总和和合计按钮的jQuery数据表

Javascript 带有总和和合计按钮的jQuery数据表,javascript,jquery,datatable,Javascript,Jquery,Datatable,我是jQuery新手,一直在从事一个使用DataTables显示和排序数据的项目。到目前为止,我已经具备了需要使用的大部分功能,但是我的脚本(提供了一列的总数)与我的buttons脚本存在问题 以下是我的全部脚本: $(文档).ready(函数(){ $('#reportTable')。数据表({ “footerCallback”:函数(行、数据、开始、结束、显示){ var api=this.api(), 数据; //删除格式以获取求和的整数数据 var intVal=函数(i){ 返回类型i

我是jQuery新手,一直在从事一个使用DataTables显示和排序数据的项目。到目前为止,我已经具备了需要使用的大部分功能,但是我的脚本(提供了一列的总数)与我的buttons脚本存在问题

以下是我的全部脚本:

$(文档).ready(函数(){
$('#reportTable')。数据表({
“footerCallback”:函数(行、数据、开始、结束、显示){
var api=this.api(),
数据;
//删除格式以获取求和的整数数据
var intVal=函数(i){
返回类型i==='string'?
i、 替换(/[\$,]/g,)*1:
i的类型=='编号'?
i:0;
};
//总页数
total=api.column(4.data().reduce(函数a,b){
返回intVal(a)+intVal(b);
}, 0);
//所有筛选页面的总计
如果(api)第4列{
搜索:“已应用”
}).data().length){
pageTotal=api.列(4{
搜索:“已应用”
}).data().reduce(函数(a,b){
返回intVal(a)+intVal(b);
});
}否则{
pageTotal=0;
}
$(api.column(4.footer()).html(pageTotal.toFixed(2));
//更新页脚
$(api.column(4.footer()).html(pageTotal.toFixed(2)+'hours('+total.toFixed(2)+'total hours');
}
});
});
以下是我的按钮脚本:

$('#reportTable')。数据表({
dom:'Blfrtip',
按钮:[{
扩展:“pdf”,
类名:“绿色图标文件”,
标题:"报告",,
文件名:“报告”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“excel”,
className:“绿色图标列表alt”,
标题:"报告",,
文件名:“报告”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“复制”,
className:“绿色标志符号标志符号重复”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“打印”,
类名:“绿色字形图标”“字形图标打印”,
标题:"报告",,
文本:“打印”,
出口选择:{
修饰语:{
页面:“当前”
}
}
}
]
});
我意识到这是一个初始化问题(因为我初始化了两次),但我试图修复它的尝试不起作用。看起来我应该可以做这样的事情:

$(文档).ready(函数(){
$('#reportTable')。数据表({
“footerCallback”:函数(行、数据、开始、结束、显示){
var api=this.api(),
数据;
//删除格式以获取求和的整数数据
var intVal=函数(i){
返回类型i==='string'?
i、 替换(/[\$,]/g,)*1:
i的类型=='编号'?
i:0;
};
//总页数
total=api.column(4.data().reduce(函数a,b){
返回intVal(a)+intVal(b);
}, 0);
//所有筛选页面的总计
如果(api)第4列{
搜索:“已应用”
}).data().length){
pageTotal=api.列(4{
搜索:“已应用”
}).data().reduce(函数(a,b){
返回intVal(a)+intVal(b);
});
}否则{
pageTotal=0;
}
$(api.column(4.footer()).html(pageTotal.toFixed(2));
//更新页脚
$(api.column(4.footer()).html(pageTotal.toFixed(2)+'hours('+total.toFixed(2)+'total hours');
}
}, {
dom:'Blfrtip',
按钮:[{
扩展:“pdf”,
类名:“绿色图标文件”,
标题:"报告",,
文件名:“报告”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“excel”,
className:“绿色图标列表alt”,
标题:"报告",,
文件名:“报告”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“复制”,
className:“绿色标志符号标志符号重复”,
出口选择:{
列:[0,1,2,3,4,5,6]
}
},
{
扩展:“打印”,
类名:“绿色字形图标”“字形图标打印”,
标题:"报告",,
文本:“打印”,
出口选择:{
修饰语:{
页面:“当前”
}
}
}
]
});
});
……但这对我不起作用。我没有收到任何错误,但无论哪个脚本在“顶部”运行,第二部分都会被忽略。有人能给我解释一下这背后的逻辑吗?我正在努力学习语法


谢谢

注意:我还没有测试这个。我将很快更新这个答案

首先,我建议将代码分块重新组织,以便于发现问题。 我只是这样做了,发现有一些代码差异

下面是对您提供的最后一批代码的清理

$(文档).ready(函数(){
$('#reportTable')。数据表({
“footerCallback”:footerCallback,
dom:'Blfrtip',
按钮:按钮
});
});
函数页脚回调(行、数据、开始、结束、显示){
var api=this.api();
//删除格式以获取求和的整数数据
var intVal=函数(i){
return(typeof i=='string')?i.replace(/[\$,]/g',)*1:
(类型i==‘编号’)?i:0;
};
var sumFn=函数(a,b){return intVal(a)+intVal(b);}
//总页数
var total=api.column(4.data().reduce(sumFn,0);
var lengthOpts={search:'applied'};
var length=api.column(4,lengthOpts.data().length;
//所有筛选页面的总计
if(长度){
pageTotal=api.column(4,lengthOpts.data().reduce(sumFn);
}埃尔斯
$('#example').DataTable( {
    "paging":   false,
    "ordering": false,
    "info":     false
} );
$('#example').DataTable( {
    {"paging":   false},
    {"ordering": false},
    {"info":     false}
} );
$(document).ready(
    function() {
        $('#reportTable').DataTable({

            dom: 'Blfrtip',
            buttons: [{
                    extend: 'pdf',
                    className: 'green glyphicon glyphicon-file',
                    title: 'Report',
                    filename: 'Report',
                    exportOptions: {
                        columns: [0, 1, 2, 3, 4, 5, 6]
                    }
                },
                {
                    extend: 'excel',
                    className: 'green glyphicon glyphicon-list-alt',
                    title: 'Report',
                    filename: 'Report',
                    exportOptions: {
                        columns: [0, 1, 2, 3, 4, 5, 6]
                    }
                },
                {
                    extend: 'copy',
                    className: 'green glyphicon glyphicon-duplicate',
                    exportOptions: {
                        columns: [0, 1, 2, 3, 4, 5, 6]
                    }
                },
                {
                    extend: 'print',
                    className: 'green glyphicon glyphicon-print',
                    title: 'Report',
                    text: 'Print',
                    exportOptions: {
                        modifier: {
                            page: 'current'
                        }
                    }
                }
            ],
            "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(5)
                    .data()
                    .reduce(function(a, b) {
                        return intVal(a) + intVal(b);
                    }, 0);

                // Total over all filtered pages
                if (api.column(5, {
                        search: 'applied'
                    }).data().length) {
                    pageTotal = api
                        .column(5, {
                            search: 'applied'
                        })
                        .data()
                        .reduce(function(a, b) {
                            return intVal(a) + intVal(b);
                        });
                } else {
                    pageTotal = 0;
                }

                $(api.column(5).footer()).html(
                    pageTotal.toFixed(2)
                );

                // Update footer
                $(api.column(5).footer()).html(
                    pageTotal.toFixed(2) + ' hours ( ' + total.toFixed(2) + ' total hours)'
                );
            },

        });
    }
);