我正在使用此代码将表另存为CSV(我对其进行了一些更改,以包括标题和排除隐藏行)。表单元格中的某个换行符丢失了,但我想将其保留为\ r \ n。在线上有很多类似的问题,但是我仍然觉得jQuery有点神秘,以某种方式,我一直无法找到这个希望的简单问题的解决方案。
function exportTableToCSV($table, delimiter) {
var $rows = $table.find('tr:visible');
// Temporary delimiter characters unlikely to be typed by keyboard
// This is to avoid accidentally splitting the actual contents
var tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
// actual delimiter characters for CSV format
colDelim = '"' + delimiter + '"',
rowDelim = '"\r\n"',
// Grab text from table into CSV formatted string
csv = '"' + $rows.map(function (i, row) {
var $row = $(row),
$cols = $row.find('td, th');
return $cols.map(function (j, col) {
var $col = $(col),
text = $col.text();
return text.replace(/"/g, '""'); // escape double quotes
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + '"',
// Data URI
csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
return csvData;
}
这是br
元素被剥夺的地方:
var $col = $(col),
text = $col.text();
一种解决方案是用标记替换它们,然后将标记替换为\r\n
:
var $col, text;
$col = $(col).clone();
$col.find("br").replaceWith("<div>{{MARKER}}</div>");
text = $col.text().replace(/{{MARKER}}/g, "\r\n");
那
克隆元素,这样我们就可以在不更改文档的情况下对其进行更改
查找其中的所有br
元素
替换它们中的每一个div
与{{MARKER}}
它里面
获取文本,这将有{{MARKER}}
它在br
小号曾经是
替换{{MARKER}}
为\r\n
function exportTableToCSV($table, delimiter) {
var $rows = $table.find('tr:visible');
// Temporary delimiter characters unlikely to be typed by keyboard
// This is to avoid accidentally splitting the actual contents
var tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
// actual delimiter characters for CSV format
colDelim = '"' + delimiter + '"',
rowDelim = '"\r\n"',
// Grab text from table into CSV formatted string
csv = '"' + $rows.map(function (i, row) {
var $row = $(row),
$cols = $row.find('td, th');
return $cols.map(function (j, col) {
var $col, text;
$col = $(col).clone();
$col.find("br").replaceWith("<div>{{MARKER}}</div>");
text = $col.text().replace(/{{MARKER}}/g, "\r\n");
return text.replace(/"/g, '""'); // escape double quotes
}).get().join(tmpColDelim);
}).get().join(tmpRowDelim)
.split(tmpRowDelim).join(rowDelim)
.split(tmpColDelim).join(colDelim) + '"',
// Data URI
csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
return csvData;
}
console.log(exportTableToCSV($("table"), ","));
table {
border-collapse: collapse;
border: 1px solid black;
}
td {
border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Testing</td>
<td>One</td>
<td>Two and<br>three</td>
</tr>
</tbody>
</table>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句