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

如何将.quiz_results元素克隆并添加至iframe以实现打印功能?

问题解决方法

你的问题出在document.querySelector('.quiz_results').appendChild(clone)这行代码上——appendChild()方法的返回值是被添加的DOM元素对象,当你把它和字符串拼接时,会被自动转成[object HTMLDivElement],导致最终HTML内容异常。

下面是两种可行的修改方案:

方案一:直接使用克隆元素的HTML内容拼接

不需要把克隆元素添加到原DOM里,直接获取它的innerHTML来构建打印用的HTML:

const printButton = document.getElementById('print-quiz');
printButton.addEventListener('click', event => {
  // 克隆目标元素
  const clone = document.querySelector('.quiz_results').cloneNode(true);
  // 用克隆元素的innerHTML构建表格内容
  const user = `<table><tr><td>${clone.innerHTML}</td></tr></table>`;
  const printHtml = `<html><head><meta charset="utf-8"><title>Printed Quiz</title></head><body>${user}</body></html>`; 
  // 获取iframe并设置内容
  const iFrame = document.getElementById('print-quiz');
  iFrame.contentDocument.body.innerHTML = printHtml;
  iFrame.focus();
  iFrame.contentWindow.print();
});

方案二:直接将克隆元素添加到iframe中(更简洁)

跳过HTML字符串拼接,直接把克隆元素追加到iframe的body里,这样能保留原元素的所有结构和样式关联:

const printButton = document.getElementById('print-quiz');
printButton.addEventListener('click', event => {
  // 克隆目标元素
  const clone = document.querySelector('.quiz_results').cloneNode(true);
  // 获取iframe的document对象
  const iFrameDoc = document.getElementById('print-quiz').contentDocument;
  // 清空iframe body并添加克隆元素
  iFrameDoc.body.innerHTML = '';
  iFrameDoc.body.appendChild(clone);
  // 执行打印
  iFrameDoc.defaultView.focus();
  iFrameDoc.defaultView.print();
});

两种方案都能解决你的问题,方案二更直接,还能避免手动拼接HTML可能带来的格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:49:56