javascript - 如何加入两个类或从 DOM 打印一个类
问题描述
我有一个 DOM,其中有一个类 .printableArea。页面上有几个 div 具有相同的类,但它们包含不同的信息。我需要做的是打印这个类的内容,让它将这些内容组合成一个打印页面。或者,我可以用唯一的 id 重命名 div(例如,#printableArea1 和 #printableArea2)并打印它们的内容。priny 我的意思是实际打印到打印机。
任何人都可以对一起打印课程内容或两个或多个 id 的内容有所了解吗?
我需要某种连接吗?
\\This is the original that loads the contents of the first .printableArea.
\\Changing the code to [1] instead of [0] gives the contents of the second .printableArea
<input type="button" align="centre" onclick="printDiv('printableArea')"
value="Print Page" />
<script>
function printDiv(divName) {
var printContents = document.getElementsByClassName(divName)
[0].innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
</script>
\\This also yields a result if I change to using an id instead of class.
<input type="button" align="centre" onclick="printDiv('printableArea')"
value="Print Page" />
<script>
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
</script>
预期的结果是同一类的所有内容都打印到一个页面上,或者不同 id 的内容打印在一个页面上。
解决方案
可以应用仅打印样式,即仅在您打印页面时应用的 CSS 页面样式。
这可以通过将仅打印样式包装在以下媒体选择器中来实现:
@media print {
/* print-only styles here */
}
您可以做的是隐藏所有没有 .printableArea 类的元素。
@media print {
body :not(.printableArea) {
display: none !important;
}
}
但这实际上会隐藏 .printableArea 类的后代,并不理想。我们可以分别选择这些后代并将它们的显示属性重置为初始值。
@media print {
body :not(.printableArea) {
display: none !important;
}
body .printableArea * {
display: initial !important;
}
}
这意味着您可以完全删除 JavaScript 并将打印按钮更改为:
<input type="button" align="centre" onclick="window.print()"
value="Print Page"/>
交互式示例
@media print {
body :not(.printableArea) {
display: none !important;
}
body .printableArea * {
display: initial !important;
}
}
<div class="printableArea">Print this</div>
<div>But dont print this</div>
<div class="printableArea"><span>Also print this</span></div>
<button onclick="window.print()">Print</button>
推荐阅读
- asp.net-core - 带有 Jaro-Winkler 相似距离算法的 EF Core
- baseline - 我在安装基线协议时遇到问题
- r - 如何将 between 函数与 case_when 函数一起使用?
- python - 使用 Python 计算多个峰下的面积
- javascript - 如何单击 Selenium 中的弹出窗口?
- load-balancing - MaxScale 集群(主-主)设置
- python - 如何使函数的单个参数采用多个不同的可接受的字符串值?
- django - 有没有办法强制 django 在检查其他应用程序之前检查当前应用程序中的静态文件
- c++ - 为什么这个程序有逻辑错误
- django - Django 表单字段不起作用