Datatables buttons pdfHtml5 exportOptions 删除嵌套标签
Datatables buttons pdfHtml5 exportOptions to remove nested tags
我正在尝试优化页面的数据tables 按钮 pdfHtml5 导出。 table 数据包含嵌套的 html 标签,这些标签在单元格数据的上方和下方创建额外的 space,这使得 PDF 非常长。
我单元格中的文本包含在两个嵌套的 <div>
和一个 <p>
中。在PDF导出中,我只需要<p>
的内容
<td>
<div class="flagimg" style="background-image: url(...)">
<div class="flagtext">
<p>name of country</p>
</div>
</div>
</td>
我正在尝试使用 exportOptions 删除嵌套的 html 标签,但我不确定如何正确编写语法。谁能帮我解决这个问题?
$(document).ready(function() {
var buttonCommon = {
exportOptions: {
format: {
body: function(data, column, row) {
data = data.replace(/<div class="flagtext"\">/, '');
data = data.replace(/<.*?>/g, "");
return data;
}
}
}
};
var oTable = $('#example').DataTable({
dom: 'Bfrtip',
buttons: [
$.extend( true, {}, buttonCommon, {
extend: 'copyHtml5'
} ),
$.extend( true, {}, buttonCommon, {
extend: 'excelHtml5'
} ),
$.extend( true, {}, buttonCommon, {
extend: 'pdfHtml5'
} )
]
});
})
我终于发现问题不在于嵌套 div,而是标签在代码中缩进了而不是在一行上。我已将此报告给 Datatables,我正在此处记录该问题,以防其他人遇到它。
我在 fiddle @davidkonrad 的基础上构建来说明正在发生的事情。
https://jsfiddle.net/lbriquet/7f08n0qa/
在第一行中,嵌套标签在代码中缩进...这会在 PDF 导出的国家/地区名称数据上方和下方产生额外的 space。
在第二行中,我将所有标签放在同一行代码中...并且在 PDF 导出中没有产生额外的间距。
<table id="example" width="100%" border="0" cellspacing="0" cellpadding="0" >
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="myclass"><a href="#">Company name</a>
</div>
</td>
<td>
<div class="flagimg" style="background-image: url(#">
<div class="flagtext">
<p>Country name</p>
</div>
</div>
</td>
<td>
<div class="myclass">Product sold</div>
</td>
</tr>
<tr>
<td>
<div class="myclass"><a href="#">Company name</a>
</div>
</td>
<td><div class="flagimg" style="background-image: url(#)"><div class="flagtext"><p>Country name</p></div></div>
</td>
<td>
<div class="myclass">Product sold</div>
</td>
</tr>
</tbody>
</table>
我正在尝试优化页面的数据tables 按钮 pdfHtml5 导出。 table 数据包含嵌套的 html 标签,这些标签在单元格数据的上方和下方创建额外的 space,这使得 PDF 非常长。
我单元格中的文本包含在两个嵌套的 <div>
和一个 <p>
中。在PDF导出中,我只需要<p>
<td>
<div class="flagimg" style="background-image: url(...)">
<div class="flagtext">
<p>name of country</p>
</div>
</div>
</td>
我正在尝试使用 exportOptions 删除嵌套的 html 标签,但我不确定如何正确编写语法。谁能帮我解决这个问题?
$(document).ready(function() {
var buttonCommon = {
exportOptions: {
format: {
body: function(data, column, row) {
data = data.replace(/<div class="flagtext"\">/, '');
data = data.replace(/<.*?>/g, "");
return data;
}
}
}
};
var oTable = $('#example').DataTable({
dom: 'Bfrtip',
buttons: [
$.extend( true, {}, buttonCommon, {
extend: 'copyHtml5'
} ),
$.extend( true, {}, buttonCommon, {
extend: 'excelHtml5'
} ),
$.extend( true, {}, buttonCommon, {
extend: 'pdfHtml5'
} )
]
});
})
我终于发现问题不在于嵌套 div,而是标签在代码中缩进了而不是在一行上。我已将此报告给 Datatables,我正在此处记录该问题,以防其他人遇到它。
我在 fiddle @davidkonrad 的基础上构建来说明正在发生的事情。
https://jsfiddle.net/lbriquet/7f08n0qa/
在第一行中,嵌套标签在代码中缩进...这会在 PDF 导出的国家/地区名称数据上方和下方产生额外的 space。
在第二行中,我将所有标签放在同一行代码中...并且在 PDF 导出中没有产生额外的间距。
<table id="example" width="100%" border="0" cellspacing="0" cellpadding="0" >
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Office</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="myclass"><a href="#">Company name</a>
</div>
</td>
<td>
<div class="flagimg" style="background-image: url(#">
<div class="flagtext">
<p>Country name</p>
</div>
</div>
</td>
<td>
<div class="myclass">Product sold</div>
</td>
</tr>
<tr>
<td>
<div class="myclass"><a href="#">Company name</a>
</div>
</td>
<td><div class="flagimg" style="background-image: url(#)"><div class="flagtext"><p>Country name</p></div></div>
</td>
<td>
<div class="myclass">Product sold</div>
</td>
</tr>
</tbody>
</table>