如何将所有CSS样式从一个DOM复制到另一个DOM?

kpbwa7wx  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(197)

我使用这个方法从我的webapp复制一个DIV,以打印在一个新的选项卡中或保存到数据库中,例如证书(这是一个自动化的过程,我不能要求用户这样做):https://stackoverflow.com/a/40389924/1062933 [* 谢谢!*]

printForm(): void {
    let printContents: any = document.getElementById('formTerms').innerHTML;
    let w: any = window.open();
    w.document.write(printContents);
    w.document.write('<scr' + 'ipt type="text/javascript">' + 'window.onload = function() { window.print(); window.close(); };' + '</sc' + 'ript>');
    w.document.close(); // necessary for IE >= 10
    w.focus(); // necessary for IE >= 10
  }

但是生成的HTML没有格式化,没有主选项卡中的CSS。

是否有办法同时复制该DIV中使用的CSS样式?

  • 我使用的是Angular 4和Teradata共价 *
ljo96ir5

ljo96ir51#

如果你知道哪些<style>标签被用来设计div的样式,你可以把那些标签的内容复制到新窗口中的新样式标签中,但是,这并不包括div本身的样式。
getComputedStyle函数可以给予元素的当前样式,然后可以在新窗口中应用它。如果您要复制的div中有子元素,则必须递归地执行此操作,或者将常见样式解析到生成的样式表中。
链接页面中有示例,但我将其复制到此处:

// print one or all of the style properties on the element
function dumpComputedStyles(elem,prop) {

  var cs = window.getComputedStyle(elem,null);
  if (prop) {
    console.log(prop+" : "+cs.getPropertyValue(prop));
    return;
  }

  var len = cs.length;
  for (var i=0;i<len;i++) {

    var style = cs[i];
    console.log(style+" : "+cs.getPropertyValue(style));
  }

}

相关问题