如何仅打印选定的 HTML 元素?

IT技术 javascript html
2021-03-14 07:17:19

我正在尝试在 HTML 中实现打印功能。我知道我可以用 打印整个页面window.print(),但是如何只打印特定的页面元素?例如特定的<DIV>Some text to print</DIV>.

6个回答

您可以使用打印特定的 CSS 样式表并隐藏除您要打印的内容之外的所有内容。

<div class="no-print">I won't print</div><div class="something-else">I will!</div>

只是no-print类将被隐藏,但任何带有打印类的都会显示。

<style type="text/css" media="print">
   .no-print { display: none; }
</style>
嗨,manyxcxi,有没有用 CSS 方式做这件事的小例子?这个 <DIV> 是一个嵌套的 <DIV> 很多层。
2021-04-17 07:17:19
给 DIV 一个 ID 并在您的打印样式表中引用它。设置: body * {display:none;} 然后 #myDiv {display:normal;} (仅覆盖该 div 上的样式)。您正在做的是默认情况下将所有内容设置为不可见,然后指定您想要的单个覆盖。
2021-04-23 07:17:19
其语法如下: <link rel="stylesheet" type="text/css" media="print" href="print.css" /> - 这告诉浏览器何时将页面发送到打印spool,它应该使用那个 CSS 来代替。
2021-04-25 07:17:19
@th3an0maly 'normal' 表示该上下文的正常选项:块、内联等。抱歉造成混淆。可能大多数元素都是块。这并不优雅,但它会起作用。我通常采取隐藏我想要的方法。
2021-05-01 07:17:19
Superstringcheese,谢谢你的解释。但是这个解决方案要求我必须在我的页面上将 'class="no-print"' 添加到 10 个 <DIV> 中。正确的?
2021-05-13 07:17:19

如果你熟悉 jQuery,你可以像这样使用jQuery Print Element插件:

$('SelectorToPrint').printElement();
这不适用于较新的 jquery 版本,因为它使用了已删除的“jQuery.browser”属性。jQuery Doc 说:此属性已在 jQuery 1.9 中删除,并且只能通过 jQuery.migrate 插件使用。请尝试改用特征检测。
2021-04-18 07:17:19
有没有香草版本?
2021-05-05 07:17:19
我喜欢 jquery,你只需要搜索一个插件。
2021-05-09 07:17:19

创建了可用于任何 HTML 元素的通用内容

HTMLElement.prototype.printMe = printMe;
function printMe(query){
  var myframe = document.createElement('IFRAME');
  myframe.domain = document.domain;
  myframe.style.position = "absolute";
  myframe.style.top = "-10000px";
  document.body.appendChild(myframe);
  myframe.contentDocument.write(this.innerHTML) ;
  setTimeout(function(){
  myframe.focus();
  myframe.contentWindow.print();
  myframe.parentNode.removeChild(myframe) ;// remove frame
  },3000); // wait for images to load inside iframe
  window.focus();
 }

用法:

document.getElementById('xyz').printMe();
document.getElementsByClassName('xyz')[0].printMe();

希望这有助于
问候
拉夫•库拉纳

这将忽略样式表样式。
2021-05-04 07:17:19

如果您使用的是 JQuery,则可以使用clone来执行以下操作:

function printElement(e) {
  var ifr = document.createElement('iframe');
  ifr.style='height: 0px; width: 0px; position: absolute'
  document.body.appendChild(ifr);

  $(e).clone().appendTo(ifr.contentDocument.body);
  ifr.contentWindow.print();

  ifr.parentElement.removeChild(ifr);
}

并像这样使用: printElement(document.getElementById('myElementToPrint'))

你能发送例子来重新创建/说明吗?
2021-04-18 07:17:19
嗯,手动添加样式表,但它仍然没有任何样式打印
2021-04-26 07:17:19

如果我理解你,你可以使用 CSS3 来打印你选择的 HTML 元素。

@media print {
  body.print-element *:not(.print) {
    display: none;
  }
}

请注意,您只需要一个选择器。这允许您使用 CSS 类轻松打印元素或整个页面。

在这里您可以查看一个工作示例:https : //jsfiddle.net/gengns/d50m8ztu/