1.当前页面

    var bodyHtml = window.document.body.innerHTML;
window.document.body.innerHTML = printHtml;//printHtml为当前需要打印的div的内容
window.print();
window.document.body.innerHTML = bodyHtml; 缺点: (1)移除页面内容再插入需要打印页面内容,页面会有一个大的跳动
(2)页面事件效果会丢失

2.iframe 打印

	   function myPrint(){
var el = "<div>Content should be print!</div>";
var iframe = document.createElement('IFRAME');
iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;');
document.body.appendChild(iframe);
var doc = iframe.contentWindow.document;
doc.write(el);
var pageStyle="html,body{height:100%}img{max-width:100%;max-height:100%;margin:0 auto}";
var style=document.createElement("style");
style.innerText= pageStyle;
doc.getElementsByTagName("head")[0].appendChild(style)
doc.close();
iframe.contentWindow.focus();
iframe.contentWindow.print();

)

缺点: 需要将所有style拷贝到iframe

3.media query 实现

	   @media print {
.no-need-print-block
{
display: none;
}
}

缺点: 一块多个地方复用的模块不好customize

4.reactComponent:

		import React, { PureComponent } from 'react';
import { string } from 'prop-types'; export default class Print extends PureComponent {
static propTypes = {
printHtml: string,
}; static defaultProps = {
printHtml: 'test html',
} setPageStyles = (iDom) => {
const styles = document.getElementsByTagName('style');
const IHead = iDom.getElementsByTagName('head')[0];
let pageStyle = '';
Array.from(styles).map((s) => {
pageStyle += s.innerHTML;
});
const style = document.createElement('style');
style.innerHTML = pageStyle;
IHead.appendChild(style);
} handlePrint = () => {
const { printHtml } = this.props;
const iFrame = this.iframe;
const iFrameWindow = iFrame.contentWindow;
const iDom = iFrameWindow.document;
iDom.write(printHtml);
this.setPageStyles(iDom);
iDom.close();
iFrameWindow.print();
} render() {
return (
<div>
<button style={{ backgroundColor: 'yellow', cursor: 'pointer' }} onClick={this.handlePrint}>print button</button>
<iframe title="print iframe" style={{ position: 'absolute', width: '0', height: '0', left: '-500px', top: '-500px' }} ref={(iframe) => { this.iframe = iframe; }}/>
</div>
);
}
}

缺点: 需要将所有style拷贝到iframe

打印方法兼容性解决方法:

   if (document.queryCommandSupported('print')) {
document.execCommand('print', false, null);
} else {
window.print();
} firefox 只打印一页问题解决: firefox 打印display: flex; display: inline-block; 改display:block;去掉float:left/right;

在desktop显示正常,但是在移动端显示变为小圆圈,无法正确展示选中取消选中效果问题解决方案:

	display: block;
width: 58px;
height: 20px;
-webkit-appearance: checkbox;
-moz-appearance: checkbox;

Js 实现局部打印功能的更多相关文章

  1. js调用局部打印功能并还原

    function printme() { //printMain为要打印的dom元素 window.document.body.innerHTML = document.getElementById( ...

  2. js实现地图打印功能

    注意:js对地图的打印功能在arcgis10.1中才有提供,所以如果要使用esri自带的地图打印功能,必须使用arcgis 10.1或更高版本的地图打印模板.(由于官网和arcgis desktop提 ...

  3. js实现浏览器打印功能

    最近接触到一个新需求,实现打印机打印小票的功能.打的一桌子小票(惭愧),不过也基本满足了业务上的需求,现在分享一下如何实现(好记性不如烂笔头) 先上代码 // 布局代码 <div id=&quo ...

  4. js插件添加打印功能

    <%@ page language="java" %> <%@ page contentType="text/html; charset=gb2312& ...

  5. 使用jquery.jqprint.js 实现的打印功能,IE9不能进行打印预览、火狐打印空白界面

    提示的内容:SCRIPT438: 对象不支持“ExecWB”属性或方法 首先解决IE9不能打印预览的问题: 查找了一大推资料 ,有两种说法:一种是IE的安全性级别太高:一种是需要安装什么   微软we ...

  6. js 前端实现打印功能

      // 此处是一个打印的方法  可以在点击事件的时候调用 dayin = () =>{ // 获取当前页面要打印的内容  // 这里的className(‘print’)是我给要打印的区域起的 ...

  7. 转载js实现打印功能

    <div id="print">打印的内容</div><a href="javascript:void(0)" onclick=& ...

  8. 前端打印功能实现及css设置

    首先是使用下边代码,实现js局部打印功能.参数dom为需要打印的节点,为了保证页面功能的单一性,最好弹出一个新的预览页面完成打印功能. function print(dom){ var body = ...

  9. 网站开发进阶(十二)JS实现打印功能(包括打印预览、打印设置等)

    JS实现打印功能(包括打印预览.打印设置等) 绪 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章.其中绝大部分文章都是使用的Lodop5.0(Web打印和套打 ...

随机推荐

  1. window.frameElement

    地址:MDN web docs 比如有一个iframe的src是xxx.htmframeElement的作用就是在xxx.htm中获得这个引用它的iframe objet这样你就可以在xxx.htm改 ...

  2. js中使用Switch

    语法 switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case 1 和 case 2 不同时执行的代码 } ...

  3. SQL切分字符串成int和for xml path

    切分字符 SqlServer切割字符串示例: --declare @StrDId nvarchar(2000) --set @StrDId='100,200,400,500,600' --转换ID,防 ...

  4. 第五章 CSS美化网页元素

    一.span标签:能让某几个文字或者某个词语凸显出来 <p> 今天是11月份的<span>第一天</span>,地铁卡不打折了 </p> 二.字体风格 ...

  5. About & Ideas & Queries

    About Blog主现高一,文化课和OI啥都不会 本Blog主太懒,所以很多内容都缩在一个文章里,如数学.图论大礼包 https://wenku.baidu.com/view/56d76029647 ...

  6. 使用python画一颗圣诞树

    # -*- coding: utf-8 -*- # @Time : 18-12-26 上午9:32 # @Author : Felix Wang import turtle # 定义圣诞树的绿叶函数 ...

  7. wepy小程序项目

    # 安装(更新) wepy 命令行工具. cnpm install wepy-cli -g # 安装依赖包 cnpm install # 开发实时编译. npm run dev WePY开发文档参考 ...

  8. 数据结构实验之查找一:二叉排序树 (SDUT 3373)

    二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),也称二叉搜索树. #include <stdio.h> #include <s ...

  9. [线性代数] 线性代数入门A Gentle Introduction

    An Overview: System of Linear Equations Basically, linear algebra solves system of linear equations ...

  10. pimpleFoam求解器 vs simpleFoam求解器 vs pisoFoam求解器 vs icoFoam

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/68072-pimplefoam-vs-simplefoam ...