Ich habe ein Skript zum Exportieren einer Ausgabetabelle nach CSV in JavaScript. Aus verschiedenen Gründen, die sich auf (jemand anderen) AJAX-Code beziehen, trigger ich dies mit einem Link anstelle eines Senden-Buttons.Tabelle in CSV in JavaScript exportieren funktioniert nicht für Tabelleneingabeelemente
HTML:
<a href="#" class="export"><img alt="ExportToExcel" src="../export1.png"></a>
JavaScript:
(".export").on('click', function (event) {
var d = new Date();
exportTableToCSV.apply(this, [$('#table1'), 'export' + d.getTime() + '.csv']);
});
function exportTableToCSV($table, filename) {
csv=createCSV($table,"yes");
csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
if (navigator.msSaveOrOpenBlob) { // separate deal for MS browsers
var blob = new Blob([csv],{type: "text/csv;charset=utf-8;"});
navigator.msSaveOrOpenBlob(blob, filename + ".csv")
} else{
$(this)
.attr({
'download': filename,
'href': csvData,
'target': '_blank'
});
}
}
function createCSV($table,$vis){
if($vis==="yes"){
var $rows = $table.find('tr:has(td):visible');
}else {var $rows = $table.find('tr:has(td)');}
tmpColDelim = String.fromCharCode(11),
tmpRowDelim = String.fromCharCode(0),
colDelim = '","',
rowDelim = '"\r\n"',
csv1 = '"' + $rows.map(function (i, row) {
var $row = $(row);
if($vis==="yes"){$cols = $row.find('td:visible');
}else {$cols = $row.find('td');}
return $cols.map(function (j, col) {
var $col = $(col),
text = $col.text();
return text.replace(/"/g, '""');
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + '"';
return csv1;
}
});
Das alles funktioniert gut, aber dann habe ich Texteingabefelder auf einige Zeilen in der Tabelle. Der Export lässt diese leer, selbst wenn Daten eingegeben wurden. Ich nehme an, das liegt daran, dass ich das Formular nicht erneut übermittele, aber ich kann die Daten aus diesen Feldern mit ('.tr_classname').serialize()
abrufen.
Ich habe es nicht gründlich überprüft, aber es sieht aus wie Sie $ col.text bekommen() die erst Rückkehr ein Textknoten in der Zelle (der td). Um den Text in einer Eingabe zu erhalten, möchten Sie eine Referenz auf diese Eingabe selbst erhalten und dann die Eigenschaft value mit .val() abrufen. – Mic