Javascript 将div及其样式复制到新窗口
我正在尝试将一个div复制到一个新窗口进行打印,这很好 但是div没有附加任何样式就复制了他Javascript 将div及其样式复制到新窗口,javascript,jquery,css,Javascript,Jquery,Css,我正在尝试将一个div复制到一个新窗口进行打印,这很好 但是div没有附加任何样式就复制了他 $('#PrintNews').bind('click', function () { var printContents = new $("#divToPrint").clone(); var myWindow = window.open("", "popup", "width=1000,height=600,scrollbars=yes,re
$('#PrintNews').bind('click', function () {
var printContents = new $("#divToPrint").clone();
var myWindow = window.open("", "popup", "width=1000,height=600,scrollbars=yes,resizable=yes," +
"toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0");
var doc = myWindow.document;
doc.open();
$(printContents).find("#PrintNews").remove();
doc.write($(printContents).html());
doc.document.close();
doc.focus();
doc.print();
doc.close();
});
});
如何在新窗口中打开该div以进行打印,但其所有样式都与原始div中的样式相同?将外部css包括到要复制div的窗口中。否则,将只复制内联样式。这取决于div的样式。如果样式是基于ID或类应用的,那么您可以在新窗口中只包含相同的样式表。但是,如果任何样式都基于元素的祖先,那么就变得很棘手,因为必须复制祖先元素才能应用确切的样式 听起来您应该使用特定于打印的样式。只有在样式表链接中包含
media=“print”
属性,才能将样式表应用于打印。然后,此样式表负责隐藏页面中您不想打印的任何元素,并定位您要打印的元素。这样,您就不会受到弹出窗口拦截器的影响,并为用户减少打印文档的步骤
通过在原始样式表中使用媒体查询,可以实现同样的效果。下面是一个非常简单的例子:
@media print {
.print {width:100%;}
.noPrint {display:none;}
}
要测试这一点,只需删除@media包装器并查看它在浏览器中的外观。它会让你对页面在纸上的外观有一个很好的了解。你应该构建新窗口的html,比如这样,链接extarnal css文件
doc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
doc.write("<html>");
doc.write("<head>");
doc.write("<link href='/css/print.css' rel='stylesheet' type='text/css' />"); // your css file comes here.
doc.write("</head>");
doc.write("<body>");
doc.write($(printContents).html());
doc.write("</body>");
doc.write("</html>");
doc.write(“”);
文件以(“”)号填写;
文件以(“”)号填写;
文件写入(“”;//你的css文件在这里。
文件以(“”)号填写;
文件以(“”)号填写;
doc.write($(printContents.html());
文件以(“”)号填写;
文件以(“”)号填写;
这是因为打印前没有加载样式
var showPrintWindow = function (context) {
var printWindow = window.open('', '');
var doc = printWindow.document;
doc.write("<html><head>");
doc.write("<link href='/css/printReport.css' rel='stylesheet' type='text/css' media='print' />");
doc.write("</head><body>");
doc.write(context);
doc.write("</body></html>");
doc.close();
function show() {
if (doc.readyState === "complete") {
printWindow.focus();
printWindow.print();
printWindow.close();
} else {
setTimeout(show, 100);
}
};
show();
};
var showPrintWindow=函数(上下文){
var printWindow=window.open(“”,”);
var doc=printWindow.document;
文件以(“”)号填写;
文件以(“”)号填写;
文件以(“”)号填写;
文件编写(上下文);
文件以(“”)号填写;
doc.close();
函数show(){
如果(doc.readyState==“完成”){
printWindow.focus();
printWindow.print();
printWindow.close();
}否则{
设置超时(显示,100);
}
};
show();
};
您复制的原始div是使用内联样式设置样式的,还是从外部ccs文件中复制的?执行此操作时,它将仅复制内联样式。任何来自样式表或(ugh)标签的样式都不会被复制。它来自外部css。那么我的选择是什么呢?doc.write(“”)
在另一个doc.write()
之前,我知道它是什么。我唯一的问题是,它打开了一个大窗口打印选项-我想重新大小它。。有可能吗?我不这么认为-打印窗口依赖于浏览器-例如,Chrome的打印窗口与大多数其他浏览器使用的打印窗口非常不同。即便如此,当用户试图打印弹出窗口中出现的任何内容时,您肯定也会遇到同样的问题?我不关心打印页面的外观-只关心大小,如果我重新调整窗口大小,那么它会自动重新调整打印窗口的大小window.open(“”,“,”高度=400,宽度=800”)代码>这可能对@EranMeir有帮助