有没有使用Ajax打印特定div的方法

时间:2016-04-04 07:10:12

标签: javascript jquery ajax

我想使用Ajax / Jquery打印特定div,截至目前我正在使用Javascript函数,但它搞砸了页面的所有动态功能:按钮等,

JSP:

    <div id="printableArea">content</div>
<input class="printButton" type="button" value="Print" name="print"
            onclick="printDiv()">

<script>
    function printDiv() {
        var printContents = document.getElementById("printableArea").innerHTML;
        var originalContents = document.body.innerHTML;
        document.body.innerHTML = printContents;
        window.print();
        document.body.innerHTML = originalContents;
    }
</script>

请让我知道如何解决这个问题,我无法找到任何正确的JQuery代码(正常工作)。

3 个答案:

答案 0 :(得分:1)

问题是您要使用要打印的div的内容替换您的正文内容。

这当然产生了许多问题,可能很难解决,其中一个是@Alexander Capone指出的问题。

所以,不要这样做,你可以:

  1. 打开一个弹出窗口,用所需内容填充,打印(我个人更喜欢这个,但不太受欢迎)。
  2. 使用@media print。
  3. 你可以在这里找到确切的方法:How to print selected div instead complete page(前2个答案)。

答案 1 :(得分:0)

根据您的描述,我可以假设&#39;搞砸动态功能&#39;表示重新插入HTML后,某些自定义jquery事件(例如鼠标悬停,单击事件)停止工作。如果是这种情况,则问题隐藏在将这些事件附加到HTML元素的方式中。 而不是像这样附加事件:

$('.some-class').click(function(){ 
    //do logic;
})

您应该在文档元素上附加事件,因此页面知道如何在任何离散时间点将事件委托给任何html元素。

$(document).on('click', '.some-class', function () {
    //do logic;
})

答案 2 :(得分:0)

我不知道,但似乎你用代码中的这些行覆盖了你的身体内容:

document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;