将div和他的风格复制到新窗口

时间:2013-09-19 12:39:48

标签: 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,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一样?

4 个答案:

答案 0 :(得分:3)

你应该构建类似这样的新窗口的html,以链接外部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>");

答案 1 :(得分:1)

这取决于div的样式。如果基于ID或类应用样式,那么您应该可以在新窗口中包含相同的样式表。但是,如果任何样式都基于元素的祖先,那么它就变得棘手,因为你必须复制祖先元素才能应用精确的样式。

听起来你应该使用特定于打印的样式。您可以通过在样式表链接上包含media="print"属性来应用样式表进行打印。然后,此样式表负责隐藏页面中您不想打印的任何元素,并定位您执行的那些元素。这样您就不会受到弹出窗口阻止程序的影响,并且可以减少用户打印文档的步骤。

您可以在原始样式表中使用媒体查询来实现相同目的。这是一个非常简单的例子:

@media print {
    .print {width:100%;}
    .noPrint {display:none;}
}

要测试这个,只需删除@media包装器,看看它在浏览器中的外观。它应该让你很好地了解页面在纸面上的外观。

答案 2 :(得分:1)

这是因为在打印之前没有加载样式。

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();
    };

答案 3 :(得分:0)

将外部css包含在您要复制DIV的窗口中。否则只会复制内联样式。