我正在使用jquery代码以csv格式导出报告。一切正常,但我想从CSV中隐藏列名列第4列。
这是我的js代码:
$(document).ready(function () {
function exportTableToCSV($table, filename) {
var $rows = $table.find('tr:has(td,th)'),
// Temporary delimiter characters unlikely to be typed by keyboard
// This is to avoid accidentally splitting the actual contents
tmpColDelim = String.fromCharCode(11), // vertical tab character
tmpRowDelim = String.fromCharCode(0), // null character
// actual delimiter characters for CSV format
colDelim = '","',
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('"', '""'); // 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);
$(this)
.attr({
'download': filename,
'href': csvData,
'target': '_blank'
});
}
// This must be a hyperlink
$(".export").on('click', function (event) {
// CSV
exportTableToCSV.apply(this, [$('#dvData>table'), 'export.csv']);
// IF CSV, don't do event.preventDefault() or return false
// We actually need this to be a typical hyperlink
});
});
我在下面给我的工作小提琴:
http://jsfiddle.net/KPEGU/925/
任何想法?如何删除此列?
答案 0 :(得分:1)
在本节中,修改代码如下:
return $cols.map(function (j, col) {
if(j != 3){
var $col = $(col),
text = $col.text();
return text.replace('"', '""'); // escape double quotes
}else{
return "";
}
}).get().join(tmpColDelim);
在小提琴中运行它并单击导出按钮,您将看到第4列未包含在csv输出中。
答案 1 :(得分:0)
你可以克隆你的表,这样就不会改变页面上的结果,然后只删除第一个td子项,你也需要为你的TH行执行此操作,但这样做有效。
$table = $table.clone();
$table.find("td:nth-child(4)").remove();
$table.find("th:nth-child(4)").remove();
http://jsfiddle.net/KPEGU/929/
编辑刚刚看到你说删除了第四列。更新。
答案 2 :(得分:0)
尝试更改$cols.map(function(…))
功能,使其不再打印第4列。
return $cols.map(function (j, col) {
// add this in here since you only want columns 0, 1, and 2
if(j<3){
var $col = $(col),
text = $col.text();
return text.replace('"', '""'); // escape double quotes
}
}).get().join(tmpColDelim);
您也可以使用相同的逻辑仅打印特定列。例如,条件,
if(j==0 || j==2){
….
}
将仅打印第1列和第3列。
更新:刚刚意识到这与@ Nate的答案类似。在我忙着打电话的时候,他没有意识到他已经发布了答案。