【发布时间】:2020-08-17 15:07:55
【问题描述】:
我需要在单击按钮时打印元素列表。我的后端有数据,并通过以下方式生成每行包含 5 个元素的元素表:
const labelDataHTML = (values) => (
<table id="dataTable" style={{ width: "100%" }}>
<caption>Labels</caption>
{_.chunk(values, 5).map((item, index) => (
<tr key={`row-${index}`} className={`row`}>
{index % 5 !== 0
? item.map((obj) => <td>{obj}</td>)
: item.map((obj) => <td>{obj}</td>)}
</tr>
))}
</table>
);
我正在另一个函数中检索 HTML 对象,该函数在单击按钮时触发(在其他 SO 页面上找到此代码块):
const printData = (domElement) => {
var printContents = document.querySelector("table").innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
};
这有两个问题。 1是我在单击打印按钮时丢失了所有HTML表格元素,它只是变成了一个没有空格的长列表。其次,一旦我点击它,我页面上的所有其他元素都会变得无响应。我也附上了一个[沙盒][1]。
我一般是 React 和 javascript 的新手。感谢所有帮助!
更新: 这是我解决问题的方法: 我根据我在 SO 上发现的大量其他问题找到了这个解决方案:
const labelDataHTML = values =>
ReactDOMServer.renderToString(
<table id="dataTable" style={{ width: "100%" }}>
<caption>Labels</caption>
{_.chunk(values, 5).map((item, index) => {
return (
<tr className={`row`}>
{index % 5 !== 0
? item.map(obj => <td>{obj}</td>)
: item.map(obj => <td>{obj}</td>)
}
</tr>
);
})}
</table>
);
const PrintLabels = labelData => {
let domElement = labelDataHTML(labelData)
let windowInstance = window.open("");
windowInstance.document.write(domElement);
windowInstance.print();
windowInstance.close();
};
【问题讨论】:
标签: javascript html reactjs printing