当然了,我只是这个做个记录了。不喜勿喷。
看了,之前一些博主写的,如下:
function doPrint() {
bdhtml = window.document.body.innerHTML;
sprnstr = "<!--startprint-->";
eprnstr = "<!--endprint-->";
prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
window.document.body.innerHTML = prnhtml;
window.print();
window.close();
window.document.body.innerHTML = prnhtml;
}
大概的意思了,就是利用两个备注标签<!--startprint-->和<!--endprint-->
然后再找到这两个标签的位置,获取两个标签之间的内容。然后把整个页面都给先替换成获取到
标签里面的内容,在进行打印。然后把这个页面给关闭,在将源码给换回来。那么打印之后下次打开就又是原来的界面了。
这样了,其实也没错。但是我这边需要了不要关闭当前页面,于是我就把windo.close();给去掉了。
结果我发现原有界面上的,事件了什么都给不生效了........................
百度解释到是因为innerHTML();相当于重新建立一个新的dom了。自然之前的dom里面的事件什么的都没了.............
所以就给稍稍改了一下用了appendChild,如下:
//打印
function doPrint() {
var bdhtml = window.document.body.innerHTML;
var sprnstr = "<!--startprint-->";
var eprnstr = "<!--endprint-->";
var prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
//创建一个虚节点,在把里面的东西给替换掉。(不然用不了appendChild方法)
var div = window.document.createElement("div");
div.id="dycym";
div.innerHTML =prnhtml;
window.document.body.appendChild(div);
//打印之前先让之前的页面给隐藏掉,后面在放出来。
$("#Form1").css('display','none');
window.print();
$("#Form1").css('display','');
//删掉我们之前添加的打印页面
$("#dycym").remove();
}