打印

时间:2015-04-27 22:12:55

标签: javascript jquery html css

我有一个页面,其中包含许多包含内容的div。 div用行包裹 - 顶部一行,底部一行,为用户提供每个div的框架。

现在我有一个问题,如果这些div有很多内容,他们在网站和实际打印页面中的外观是不同的。实际打印的页面需要更多行来显示相同​​的内容,因此我需要使div更高并降低底线。

我写了一些在chrome中运行的代码:



    var mediaQueryList = window.matchMedia('print');
    mediaQueryList.addListener(function (mql) {
        if (mql.matches) {
            changeDivHeight();
        } 
    });




对于FF和IE,代码不起作用。我用:



    window.onbeforeprint = function () {
        changeDivHeight();
    };

    window.onafterprint = function () {
        changeDivHeight();
    }

// i need those two because when i'm back in the web-site i want the height to be changed again because in the print mode the page what thinner..




changeDivHeight查看所有div的子元素,并将其高度添加到div高度。正如我所说,它适用于铬。 在FF和IE中,它不起作用,我认为因为它们没有打印预览,div不会改变以适应实际的打印页面,而在chrome中我确实有打印预览所以div适合实际打印的页面。

如何在FF和IE中修复此问题?

谢谢!

修改



function changeDivHeight() {
    $.each(".div, function(index, div) {
        var newHeight = 0;
        for (i = 0; i < div.children.length) {
             newHeight += div.children[i].clientHeight;   
         }
  
         if (newHeight > 240) {
              $(div.parent).css("height", newHeight);
          }
   }
}
&#13;
&#13;
&#13;

并且每个div都填充了P元素可能有很多文本

修改

我发现因为chrome有打印预览,所以打印视图中的段落的clientHeight会有很多文本更改,因此它可以正常工作。 在IE和FF中我不具备此功能,因此高度不会改变,并且它不起作用。

1 个答案:

答案 0 :(得分:1)

您应该可以在不使用jQuery或JavaScript的情况下执行此操作。如果我正确理解你的问题,可以使用CSS实现,这应该与所有现代浏览器兼容。只需将以下内容添加到CSS的底部即可。

@media print {
    #divtomakelarger {
        height: auto; /*or whatever value you want*/
    }
}