Пользовательская кнопка DataTables Заголовок обновления экспорта
Я использую плагин экспорта в DataTables для экспорта отфильтрованных результатов из таблицы. Вы можете либо экспортировать файл Excel, выбрав выпадающий список над заголовком столбца, либо щелкнуть пользовательскую кнопку, которая фильтрует результаты для вас, как встроенный фильтр. (Я тоже использую selectpicker). Однако, когда вы используете функцию фильтра в DataTables, вы должны переписать заголовки столбцов. в противном случае вы получаете заголовки заголовков со всеми данными из выбора. Поэтому я добавил переписать заголовок для кнопки "excelHtml5". Это прекрасно работает! Но она не будет работать на моей пользовательской кнопке "Экспорт в автономном режиме". Кто-нибудь знает решение?
$(document).ready(function () {
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
var devicelist = $('#newdevicelist').DataTable({
keys: true,
autoFill: true,
'iDisplayLength': 20,
dom: 'Bfrtip',
buttons: [
{
extend: 'excelHtml5',
title: $("#report_title").val(),
exportOptions: {
format: {
header: function (data, columnIdx) {
return writeTitle(columnIdx) != '' ? writeTitle(columnIdx) : data;
},
}
}
},
{
text: 'Export Offline',
title: 'Offline Report',
filename: 'Offline Report',
exportOptions: {
columns: ':visible',
format: {
header: function (data, column) {
return writeTitle(column) != '' ? writeTitle(column) : data;
},
}
},
action: function ( e, dt, node, config ) {
devicelist.search('').draw();
filterColumn( 5, 'Down');
filterColumn( 6, 'Disconnected');
filterColumn( 7, 'Offline');
$.fn.dataTable.ext.buttons.excelHtml5.action.call(this, e, dt, node, config);
},
}
],
"initComplete": function (settings, json) {
this.api().columns([2, 4, 5, 6, 7, 8, 9, 10, 12, 13]).every(function () {
var column = this;
var header = this.header();
var select = $('<select multiple class="selectsearch selectpicker' + column.index() + '" rel="' + column.index() + '" title="' + $(header).html() + '"><optgroup label="' + $(header).html() + '"><option></option></optgroup></select>')
.appendTo($(column.header()).empty())
column.data().unique().sort().each(function (d, j) {
d = d.split('<p style="font-size: .01em;">').pop().split('</p>').shift();
if ( d != "" ) {
select.append('<option value="' + d + '">' + d + '</option>')
}
});
});
$('.selectpicker2, .selectpicker3, .selectpicker4, .selectpicker5, .selectpicker6, .selectpicker7, .selectpicker8, .selectpicker9, .selectpicker10, .selectpicker12, .selectpicker13').selectpicker({
style: 'btn-default',
size: 4
});
$('#clear-all-cache').show();
$('.select-type').show();
$('.buttons-excel').html("<i class='fa fa-fw fa-file-excel-o'></i> Excel");
$('div.dt-buttons').prepend('<a class="dt-button bg-blue buttons-html5" id="reset-list" href="#">Reset List</a>' );
},
});
function filterColumn(i, search) {
// alert( search + ' - ' + i);
// var query = "(( )|^)" + regex_escape(search) + "(( )|$)";
$('#newdevicelist').DataTable().column(i).search(
search,
1, 0
).draw();
}
});