尝试在导出期间从数据表中删除 html
Trying to strip html from Datatables during export
我完全按照示例使用数据表 here。因此,为了导出数据,我使用了一个函数,该函数允许我在 excel 中使用换行符更改 <br>
。
我用过这个:
return column === 5 ? data.replace( /<br\s*\/?>/ig, "\n"): data;
但是,当我尝试添加我想对不同列进行的第二个更改时,它不起作用...我尝试将其添加到第一个有效替换项的正下方:
return column === 1 ? data.replace( /<.*?>/ig, ""): data;
我想在首先将 <br>
更改为换行符后基本上删除所有 html 标记。但是就像我现在的代码一样,第二部分在导出过程中被忽略了...有人知道我做错了什么吗?
这是我的完整代码:
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
return column === 5 ? data.replace( /<br\s*\/?>/ig, "\n"): data;
return column === 1 ? data.replace( /<.*?>/ig, ""): data;
}
}
}
};
var t2e = $('#table2excel').DataTable({
dom: 'Bfrtip',
buttons:[
$.extend( true, {}, fixNewLine, {
extend: 'excelHtml5'
} ),
'pdf', 'print', 'copy', 'csv' //, 'excel'
]
});
代码中不能有多个 return 语句,只有第一个会被执行,试试这个:
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
if (column === 5) {
data = data.replace(/<br\s*\/?>/ig, "\n");
}
return column === 1 ? data.replace(/<.*?>/ig, ""): data;
}
}
}
};
单独处理每一列的 switch 语句对我来说非常有效。请参阅下面我的用法...
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, row, column, node ) {
switch(column){
case 1 : return column === 1 ? data.replace(/<.*?>/ig, "") : data; break;
case 2 : return column === 2 ? data.replace(/<.*?>/ig, "") : data; break;
case 3 : return column === 3 ? data.replace(/<.*?>/ig, "") : data; break;
case 4 : return column === 4 ? data.replace(/<.*?>/ig, "") : data; break;
case 5 : return column === 5 ? data.replace(/<.*?>/ig, "") : data; break;
case 6 : return column === 6 ? data.replace(/<.*?>/ig, "") : data; break;
default : return data; break;
}
}
}
}
};
我完全按照示例使用数据表 here。因此,为了导出数据,我使用了一个函数,该函数允许我在 excel 中使用换行符更改 <br>
。
我用过这个:
return column === 5 ? data.replace( /<br\s*\/?>/ig, "\n"): data;
但是,当我尝试添加我想对不同列进行的第二个更改时,它不起作用...我尝试将其添加到第一个有效替换项的正下方:
return column === 1 ? data.replace( /<.*?>/ig, ""): data;
我想在首先将 <br>
更改为换行符后基本上删除所有 html 标记。但是就像我现在的代码一样,第二部分在导出过程中被忽略了...有人知道我做错了什么吗?
这是我的完整代码:
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
return column === 5 ? data.replace( /<br\s*\/?>/ig, "\n"): data;
return column === 1 ? data.replace( /<.*?>/ig, ""): data;
}
}
}
};
var t2e = $('#table2excel').DataTable({
dom: 'Bfrtip',
buttons:[
$.extend( true, {}, fixNewLine, {
extend: 'excelHtml5'
} ),
'pdf', 'print', 'copy', 'csv' //, 'excel'
]
});
代码中不能有多个 return 语句,只有第一个会被执行,试试这个:
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
if (column === 5) {
data = data.replace(/<br\s*\/?>/ig, "\n");
}
return column === 1 ? data.replace(/<.*?>/ig, ""): data;
}
}
}
};
单独处理每一列的 switch 语句对我来说非常有效。请参阅下面我的用法...
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, row, column, node ) {
switch(column){
case 1 : return column === 1 ? data.replace(/<.*?>/ig, "") : data; break;
case 2 : return column === 2 ? data.replace(/<.*?>/ig, "") : data; break;
case 3 : return column === 3 ? data.replace(/<.*?>/ig, "") : data; break;
case 4 : return column === 4 ? data.replace(/<.*?>/ig, "") : data; break;
case 5 : return column === 5 ? data.replace(/<.*?>/ig, "") : data; break;
case 6 : return column === 6 ? data.replace(/<.*?>/ig, "") : data; break;
default : return data; break;
}
}
}
}
};