在我的PHP-jQuery DataTable中,所有行中列的所有值都是十进制值,并且还包含" ₹"在十进制值之前签名如下:
+---------+
| Column |
+---------+
| ₹ 1.20 |
+---------+
| ₹ 3.42 |
+---------+
| ₹ 9.07 |
+---------+
我想显示表格页脚上所有列的小数值总和,如下所示:
+----------------+
| Column |
+----------------+
| ₹ 1.20 |
+----------------+
| ₹ 3.42 |
+----------------+
| ₹ 9.07 |
+----------------+
| ₹ 13.69 (Total)|
+----------------+
我尝试使用" footerCallback
"功能,但失败了:
"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 === 'string' ?
i : 0.00;
};
// 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)'
);
},
表格页脚的结果如下:
₹ NaN (Total)
请帮忙!
答案 0 :(得分:0)
您的intVal函数检查该值是否为字符串,是否将其转换为数字,但如果它已经是数字,则返回0.
Yu不使用整数,十进制数是浮点数,所以这不适合加币,因为它只返回整数。
删除你的整个intVal函数并替换为这样的东西,它所做的只是删除任何不是数字或小数点的东西:
var floatVal = function ( i ) {
return i.replace( /[^\d\.]/g, '');
};
然后更改pageTotal函数return intVal(a) + intVal(b);
的这一行
对此,它会将您的数字作为浮点数加在一起,而不是将它们相互追加:
return parseFloat(floatVal(a)) + parseFloat(floatVal(b));
答案 1 :(得分:0)
如果有人正在寻找正确答案(多年后):
您需要将 typeof i === 'string' ?
更改为 typeof i === 'number' ?
这是一个即使使用过滤器也能工作的示例代码:
"footerCallback": function (row, data, start, end, display) {
var api = this.api(), data;
//Remove the formatting to get decimal data for summation
var intVal = function (i) {
return typeof i === 'string' ?
i.replace(/[\$,₹]/g, '') * 1 :
typeof i === 'number' ?
i : 0.00;
};
//Total over this page
pageTotal = api
.column(3, { filter: 'applied' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
//Update footer
$(api.column(3).footer()).html('$' + pageTotal);
}