Print a div content using Jquery

前端 未结 13 2082
栀梦
栀梦 2020-11-30 05:22

I want to print the content of a div using jQuery. This question is already asked in SO, but I can\'t find the correct (working) answer.

This is is my HTML:

相关标签:
13条回答
  • I update this function
    now you can print any tag or any part of the page with its full style
    must include jquery.js file

    HTML

    <div id='DivIdToPrint'>
        <p>This is a sample text for printing purpose.</p>
    </div>
    <p>Do not print.</p>
    <input type='button' id='btn' value='Print' onclick='printtag("DivIdToPrint");' >
    

    JavaScript

            function printtag(tagid) {
                var hashid = "#"+ tagid;
                var tagname =  $(hashid).prop("tagName").toLowerCase() ;
                var attributes = ""; 
                var attrs = document.getElementById(tagid).attributes;
                  $.each(attrs,function(i,elem){
                    attributes +=  " "+  elem.name+" ='"+elem.value+"' " ;
                  })
                var divToPrint= $(hashid).html() ;
                var head = "<html><head>"+ $("head").html() + "</head>" ;
                var allcontent = head + "<body  onload='window.print()' >"+ "<" + tagname + attributes + ">" +  divToPrint + "</" + tagname + ">" +  "</body></html>"  ;
                var newWin=window.open('','Print-Window');
                newWin.document.open();
                newWin.document.write(allcontent);
                newWin.document.close();
               // setTimeout(function(){newWin.close();},10);
            }
    
    0 讨论(0)
  • 2020-11-30 05:59

    If you want to do this without an extra plugin (like printThis), I think this should work. The idea is to have a special div that will be printed, while everything else is hidden using CSS. This is easier to do if the div is a direct child of the body tag, so you will have to move whatever you want to print to a div like that. S So begin with creating a div with id print-me as a direct child to your body tag. Then use this code to print the div:

    $("#btn").click(function () {
        //Copy the element you want to print to the print-me div.
        $("#printarea").clone().appendTo("#print-me");
        //Apply some styles to hide everything else while printing.
        $("body").addClass("printing");
        //Print the window.
        window.print();
        //Restore the styles.
        $("body").removeClass("printing");
        //Clear up the div.
        $("#print-me").empty();
    });
    

    The styles you need are these:

    @media print {
        /* Hide everything in the body when printing... */
        body.printing * { display: none; }
        /* ...except our special div. */
        body.printing #print-me { display: block; }
    }
    
    @media screen {
        /* Hide the special layer from the screen. */
        #print-me { display: none; }
    }
    

    The reason why we should only apply the @print styles when the printing class is present is that the page should be printed as normally if the user prints the page by selecting File -> Print.

    0 讨论(0)
  • 2020-11-30 06:02

    Some jQuery research has failed, so I moved to JavaScript (thanks for your suggestion Anders).

    And it is working well...

    HTML

    <div id='DivIdToPrint'>
        <p>This is a sample text for printing purpose.</p>
    </div>
    <p>Do not print.</p>
    <input type='button' id='btn' value='Print' onclick='printDiv();'>
    

    JavaScript

    function printDiv() 
    {
    
      var divToPrint=document.getElementById('DivIdToPrint');
    
      var newWin=window.open('','Print-Window');
    
      newWin.document.open();
    
      newWin.document.write('<html><body onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
    
      newWin.document.close();
    
      setTimeout(function(){newWin.close();},10);
    
    }
    
    0 讨论(0)
  • 2020-11-30 06:04

    I tried all the non-plugin approaches here, but all caused blank pages to print after the content, or had other problems. Here's my solution:

    Html:

    <body>
    <div id="page-content">        
        <div id="printme">Content To Print</div>
        <div>Don't print this.</div>
    </div>
    <div id="hidden-print-div"></div>
    </body>
    

    Jquery:

        $(document).ready(function () {
            $("#hidden-print-div").html($("#printme").html());
        });
    

    Css:

        #hidden-print-div {
            display: none;
        }
    
        @media print {
            #hidden-print-div {
                display: block;
            }
    
            #page-content {
                display: none;
            }
        }
    
    0 讨论(0)
  • 2020-11-30 06:05

    https://github.com/jasonday/printThis

    $("#myID").printThis();
    

    Great Jquery plugin to do exactly what your after

    0 讨论(0)
  • 2020-11-30 06:06

    Without using any plugin you can opt this logic.

    $("#btn").click(function () {
        //Hide all other elements other than printarea.
        $("#printarea").show();
        window.print();
    });
    
    0 讨论(0)
提交回复
热议问题