Ask Ben: Print Part Of A Web Page With jQueryを参考にしました。
上記サイトで公開されてるコード。
//Create a jquery plugin that prints the given element. jQuery.fn.print = function(){ // NOTE: We are trimming the jQuery collection down to the // first element in the collection. if (this.size() > 1){ this.eq( 0 ).print(); return; } else if (!this.size()){ return; } // ASSERT: At this point, we know that the current jQuery // collection (as defined by THIS), contains only one // printable element. // Create a random name for the print frame. var strFrameName = ("printer-" + (new Date()).getTime()); // Create an iFrame with the new name. var jFrame = $( "<iframe name='" + strFrameName + "'>" ); // Hide the frame (sort of) and attach to the body. jFrame .css( "width", "1px" ) .css( "height", "1px" ) .css( "position", "absolute" ) .css( "left", "-9999px" ) .appendTo( $( "body:first" ) ) ; // Get a FRAMES reference to the new frame. var objFrame = window.frames[ strFrameName ]; // Get a reference to the DOM in the new frame. var objDoc = objFrame.document; // Grab all the style tags and copy to the new // document so that we capture look and feel of // the current document. // Create a temp document DIV to hold the style tags. // This is the only way I could find to get the style // tags into IE. var jStyleDiv = $( "<div>" ).append( $( "style" ).clone() ); // Write the HTML for the document. In this, we will // write out the HTML of the current element. objDoc.open(); objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" ); objDoc.write( "<html>" ); objDoc.write( "<body>" ); objDoc.write( "<head>" ); objDoc.write( "<title>" ); objDoc.write( document.title ); objDoc.write( "</title>" ); objDoc.write( jStyleDiv.html() ); objDoc.write( "<link href=\"css/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\">" ); objDoc.write( "</head>" ); objDoc.write( this.html() ); objDoc.write( "</body>" ); objDoc.write( "</html>" ); objDoc.close(); // Print the document. objFrame.focus(); objFrame.print(); // Have the frame remove itself in about a minute so that // we don't build up too many of these frames. setTimeout( function(){ jFrame.remove(); }, (60 * 1000) ); }
次のように呼び出す。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script src="http://www.google.com/jsapi"></script> <script> google.load("jquery", "1.4.2"); </script> <script type="text/javascript" src="js/jquery.print.js"></script> <script type="text/javascript"><!-- $( function () { $("#print").attr("href", "javascript:void( 0 )").click( function () { var header = $("<div>").attr("id", "print").append($("#test").clone()).print(); return (false); }); }); --></script> </head> <body> <div id="test">test</div> </body> </html>
要素のprint()メソッドを呼び出すと、印刷ダイアログを表示する。
CSSで印刷時のスタイルを定義するといいかも。
@media print { #print { display: block; } }