具有删除格式的 DataTable 页脚回调
DataTable footer callback with remove formatting
我正在使用 Laravel (v8) blade 和 DataTable.Js
我有 table 并且有两列带有浮动数据,例如“24 000, 00 USD”。我必须为每页和所有数据显示此列数据的总计。但是我的代码显示不正确的结果。
看来我必须从数据中删除空格和“USZ”和“USD”字母,然后将“,”浮动符号更改为“。”。
请帮我解决这个问题。
这是 blade
处的 JS 代码
$("#kvit_date1, #kvit_date2").flatpickr({dateFormat: "Y-m-d"});
//DataTables
var table = $('#docsTable').DataTable({
paging: true,
searching: true,
lengthChange: false,
ordering: true,
order: [[ 1, 'desc' ]],
rowGroup: {
dataSrc: 3
},
dom: 'Bfrtip',
buttons: [
'excel', 'print', 'pdf'
],
footer: true,
initComplete: function() {
$('.buttons-copy').html('<i class="far fa-copy" />')
$('.buttons-csv').html('<i class="far fa-file-csv" />')
$('.buttons-excel').html('<i class="far fa-file-excel" />')
$('.buttons-pdf').html('<i class="far fa-file-pdf" />')
$('.buttons-print').html('<i class="fa fa-print" />')
},
language: {
"lengthMenu": "Sahifada _MENU_ ta ma`lumot ko`rsat",
"zeroRecords": "Xech narsa topilmadi uzr!",
"info": "_PAGE_ sahifa, jami _PAGES_ sahifa",
"infoEmpty": "Ma'lumotlar mavjud emas",
"infoFiltered": "(_MAX_ ta malumot filtrlangan)",
"search": "Izlash"
},
drawCallback: function () {
var api = this.api();
// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
return typeof i === 'string' ?
parseFloat(i.replace(/'UZS', 'USD','/g, '.'))*1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
totalUZS = api
.column( 6 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over all pages
totalUSD = api
.column( 7 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over this page
pageUZS = api
.column( 6, { page: 'current'} )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over this page
pageUSD = api
.column( 7, { page: 'current'} )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Update footer
$( api.column( 6 ).footer() ).html(
totalUZS + ' UZS / SAHIFA ' + pageUZS + ' UZS'
);
$( api.column( 7 ).footer() ).html(
totalUSD + ' USD / SAHIFA ' + pageUSD + ' USD'
);
}
});
这是 table header 个字段
<table class="datatables-basic table table-sm table-hover font-small-3" id="docsTable">
<thead class="thead-light">
<tr>
<th rowspan="2">#</th>
<th rowspan="2"></th>
<th rowspan="2">DOC#</th>
<th rowspan="2">SANA</th>
<th rowspan="2">HAMKOR</th>
<th rowspan="2">TELEFON</th>
<th colspan="2" class="text-center">NARXI</th>
<th rowspan="2">AMALLAR</th>
</tr>
<tr>
<th>UZS</th>
<th>USD</th>
</tr>
</thead>
这应该可以完成工作(另请注意,当您使用 parseFloat()
时,乘以 * 1
是多余的):
// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
return typeof i === 'string'
? parseFloat(i.replace(/UZS|USD| /g, '').replace(/,/,'.')) //<= please, notice there's a space between USD| and /g
: typeof i === 'number'
? i
: 0
}
如果我可以建议,嵌套三元运算符 很快就会让您的代码难以阅读。更喜欢 if... else...
而不是
我正在使用 Laravel (v8) blade 和 DataTable.Js 我有 table 并且有两列带有浮动数据,例如“24 000, 00 USD”。我必须为每页和所有数据显示此列数据的总计。但是我的代码显示不正确的结果。 看来我必须从数据中删除空格和“USZ”和“USD”字母,然后将“,”浮动符号更改为“。”。
请帮我解决这个问题。
这是 blade
处的 JS 代码 $("#kvit_date1, #kvit_date2").flatpickr({dateFormat: "Y-m-d"});
//DataTables
var table = $('#docsTable').DataTable({
paging: true,
searching: true,
lengthChange: false,
ordering: true,
order: [[ 1, 'desc' ]],
rowGroup: {
dataSrc: 3
},
dom: 'Bfrtip',
buttons: [
'excel', 'print', 'pdf'
],
footer: true,
initComplete: function() {
$('.buttons-copy').html('<i class="far fa-copy" />')
$('.buttons-csv').html('<i class="far fa-file-csv" />')
$('.buttons-excel').html('<i class="far fa-file-excel" />')
$('.buttons-pdf').html('<i class="far fa-file-pdf" />')
$('.buttons-print').html('<i class="fa fa-print" />')
},
language: {
"lengthMenu": "Sahifada _MENU_ ta ma`lumot ko`rsat",
"zeroRecords": "Xech narsa topilmadi uzr!",
"info": "_PAGE_ sahifa, jami _PAGES_ sahifa",
"infoEmpty": "Ma'lumotlar mavjud emas",
"infoFiltered": "(_MAX_ ta malumot filtrlangan)",
"search": "Izlash"
},
drawCallback: function () {
var api = this.api();
// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
return typeof i === 'string' ?
parseFloat(i.replace(/'UZS', 'USD','/g, '.'))*1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
totalUZS = api
.column( 6 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over all pages
totalUSD = api
.column( 7 )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over this page
pageUZS = api
.column( 6, { page: 'current'} )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Total over this page
pageUSD = api
.column( 7, { page: 'current'} )
.data()
.reduce( function (a, b) {
return intVal(a) + intVal(b);
}, 0 );
// Update footer
$( api.column( 6 ).footer() ).html(
totalUZS + ' UZS / SAHIFA ' + pageUZS + ' UZS'
);
$( api.column( 7 ).footer() ).html(
totalUSD + ' USD / SAHIFA ' + pageUSD + ' USD'
);
}
});
这是 table header 个字段
<table class="datatables-basic table table-sm table-hover font-small-3" id="docsTable">
<thead class="thead-light">
<tr>
<th rowspan="2">#</th>
<th rowspan="2"></th>
<th rowspan="2">DOC#</th>
<th rowspan="2">SANA</th>
<th rowspan="2">HAMKOR</th>
<th rowspan="2">TELEFON</th>
<th colspan="2" class="text-center">NARXI</th>
<th rowspan="2">AMALLAR</th>
</tr>
<tr>
<th>UZS</th>
<th>USD</th>
</tr>
</thead>
这应该可以完成工作(另请注意,当您使用 parseFloat()
时,乘以 * 1
是多余的):
// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
return typeof i === 'string'
? parseFloat(i.replace(/UZS|USD| /g, '').replace(/,/,'.')) //<= please, notice there's a space between USD| and /g
: typeof i === 'number'
? i
: 0
}
如果我可以建议,嵌套三元运算符 很快就会让您的代码难以阅读。更喜欢 if... else...
而不是