im using datatables.net and some of my pages have multiple tables. i cant figure out how to iterate over each table saving the data to a variable so that i can push it out as a single csv when the export button is clicked.
some tables have different headers and this is all fine. i just want to output all the th and td values from within the whole table to a single csv. if datatables doesnt support this already in some roundabout way then its fine if it is jquery or javascript.
thanks in advance
Try this method
<table id="example1" class="table" style="width:100%">
</table>
<table id="example2" class="table" style="width:100%">
</table>
JS:
var table = $('#example1').DataTable();
var data = table.buttons.exportData();
// Do something with the 'data' variable
this is what worked for me. thanks.
$( "#exportalltocsv" ).on( "click", function(e) {
e.preventDefault();
let csvstring = "";
$('.dataTable').each( function () {
var columns = [];
$(this).DataTable().columns().eq(0).each( function ( index ) {
var column = this.column( index ).header();
columns.push($(column).html());
} );
csvstring += columns.map(th => '"' + th.replace('"', '\"') + '"').toString() + "\n";
$(this).DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
csvstring += this.data().map(value => '"' + value.replace('"', '\"') + '"').toString() + "\n";
} );
csvstring += "\n\n";
});
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvstring);
hiddenElement.target = '_blank';
hiddenElement.download = '<?=$pagetitle.date(' Y-m-d H-i-s')?>.csv';
hiddenElement.click();
});