You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中打印指定元素(PDF/纸张打印):电商收据需求

电商网站收据打印优化方案

不用折腾隐藏再恢复页面元素,直接用CSS打印媒体查询就能完美解决,全程不修改DOM结构,页面显示和打印体验互不干扰。

核心思路

通过@media print规则,专门为打印场景定义样式:

  • 隐藏页面中除收据外的所有内容
  • 优化收据在打印时的排版(比如调整宽度、去除不必要的背景色以节省墨水)

完整代码实现

CSS 代码

/* 页面正常显示时的收据样式 */
.receipt {
  border-collapse: collapse;
  max-width: 80%;
  font-family: sans-serif;
}

.receipt td {
  padding: .5em;
}

.receipt tr:nth-child(even) {
  border: 1px solid #333;
  border-inline: none;
  background: #ddd;
}

.receipt tr:nth-child(odd) {
  background: #fff
}

.header-Uprice,
.item-Uprice,
.header-qty,
.item-qty {
  text-align: center
}

.total {
  border-bottom: 3px double #000
}

/* 打印专属样式 */
@media print {
  /* 隐藏所有非收据元素 */
  body > *:not(.receipt) {
    display: none !important;
  }

  /* 调整收据在打印时的样式 */
  .receipt {
    max-width: 100%;
    width: 100%;
  }

  /* 可选:去掉背景色,节省打印机墨水 */
  .receipt tr:nth-child(even) {
    background: transparent;
  }
}

HTML 代码(修正原结构错误)

<table class="receipt">
  <tr class="table-headers">
    <td class="header-id">#</td>
    <td class="header-desc">Item Description</td>
    <td class="header-Uprice">Unit Price</td>
    <td class="header-qty">Qty</td>
    <td class="header-price">Price</td>
  </tr>
  <tr class="item" id="1">
    <td class="item-id">1</td>
    <td class="item-desc">Dummy Item1</td>
    <td class="item-Uprice">200$</td>
    <td class="item-qty">1</td>
    <td class="item-price">200$</td>
  </tr>
  <tr class="item" id="2">
    <td class="item-id">2</td>
    <td class="item-desc">Dummy Item2</td>
    <td class="item-Uprice">75$</td>
    <td class="item-qty">1</td>
    <td class="item-price">75$</td>
  </tr>
  <tr class="item" id="3">
    <td class="item-id">3</td>
    <td class="item-desc">Dummy Item3</td>
    <td class="item-Uprice">100$</td>
    <td class="item-qty">2</td>
    <td class="item-price">200$</td>
  </tr>
  <tr class="total">
    <td colspan="4">Total</td>
    <td>475$</td>
  </tr>
</table>

触发打印

在按钮点击事件里直接调用:

document.querySelector('#print-btn').addEventListener('click', () => {
  window.print();
});

点击打印按钮后,浏览器会直接加载打印样式,只显示收据内容,打印完成后页面完全不受影响,没有任何隐藏/恢复的闪烁问题。

内容的提问来源于stack exchange,提问作者UncleJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:03:27