由于项目中用到了打印功能,也在网上查询了些方法,总体来说有两个思路:
1. dom替换
2. 新窗口打印
dom替换会导致事件失效,如果重新加载的话又会影响到体验;而新窗口缺因为样式问题也不好解决,都不满足项目的需求,于是把自己的方法贴上来:
function printMe (content) { var printDiv = document.createElement('div'); printDiv.innerHTML = content.innerHTML; printDiv.style.position = 'fixed'; printDiv.style.left = '0'; printDiv.style.top = '0'; printDiv.style.width = '100%'; printDiv.style.height = '100%'; printDiv.style.zIndex = '100000'; printDiv.style.background = '#fff'; printDiv.style.overflow = 'auto'; document.body.appendChild(printDiv); window.print(); document.body.removeChild(printDiv); };
代码很简单,把要打印的内容放到一个新的div里,div宽高设置100%;position设为fixed或者absolute占满屏幕,把当前页面内容全部覆盖著,调用window.print()之后再把该div删除。这样既会使本来的样式生效,也不会有替换dom产生的各种问题。