博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打印插件
阅读量:5098 次
发布时间:2019-06-13

本文共 9774 字,大约阅读时间需要 32 分钟。

http://www.jq22.com/jquery-info12837

jQuery.print.js

/* @license  * jQuery.print, version 1.3.2 *  (c) Sathvik Ponangi, Doers' Guild * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/) *--------------------------------------------------------------------------*/(function ($) {    "use strict";    // A nice closure for our definitions    function getjQueryObject(string) {        // Make string a vaild jQuery thing        var jqObj = $("");        try {            jqObj = $(string)                .clone();        } catch (e) {            jqObj = $("")                .html(string);        }        return jqObj;    }    function printFrame(frameWindow) {        // Print the selected window/iframe        var def = $.Deferred();        try {            setTimeout(function () {                // Fix for IE : Allow it to render the iframe                frameWindow.focus();                try {                    // Fix for IE11 - printng the whole page instead of the iframe content                    if (!frameWindow.document.execCommand('print', false, null)) {                        // document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891                        frameWindow.print();                    }                } catch (e) {                    frameWindow.print();                }                frameWindow.close();                def.resolve();            }, 250);        } catch (err) {            def.reject(err);        }        return def;    }    function printContentInNewWindow(content) {        // Open a new window and print selected content        var w = window.open();        w.document.write(content);        w.document.close();        return printFrame(w);    }    function isNode(o) {        /* http://stackoverflow.com/a/384380/937891 */        return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");    }    $.print = $.fn.print = function () {        // Print a given set of elements        var options, $this, self = this;        // console.log("Printing", this, arguments);        if (self instanceof $) {            // Get the node if it is a jQuery object            self = self.get(0);        }        if (isNode(self)) {            // If `this` is a HTML element, i.e. for            // $(selector).print()            $this = $(self);            if (arguments.length > 0) {                options = arguments[0];            }        } else {            if (arguments.length > 0) {                // $.print(selector,options)                $this = $(arguments[0]);                if (isNode($this[0])) {                    if (arguments.length > 1) {                        options = arguments[1];                    }                } else {                    // $.print(options)                    options = arguments[0];                    $this = $("html");                }            } else {                // $.print()                $this = $("html");            }        }        // Default options        var defaults = {            globalStyles: true,            mediaPrint: false,            stylesheet: null,            noPrintSelector: ".no-print",            iframe: true,            append: null,            prepend: null,            manuallyCopyFormValues: true,            deferred: $.Deferred()        };        // Merge with user-options        options = $.extend({}, defaults, (options || {}));        var $styles = $("");        if (options.globalStyles) {            // Apply the stlyes from the current sheet to the printed page            $styles = $("style, link, meta, title");        } else if (options.mediaPrint) {            // Apply the media-print stylesheet            $styles = $("link[media=print]");        }        if (options.stylesheet) {            // Add a custom stylesheet if given            $styles = $.merge($styles, $('
')); } // Create a copy of the element to print var copy = $this.clone(); // Wrap it in a span to get the HTML markup string copy = $("") .append(copy); // Remove unwanted elements copy.find(options.noPrintSelector) .remove(); // Add in the styles copy.append($styles.clone()); // Appedned content copy.append(getjQueryObject(options.append)); // Prepended content copy.prepend(getjQueryObject(options.prepend)); if (options.manuallyCopyFormValues) { // Manually copy form values into the HTML for printing user-modified input fields // http://stackoverflow.com/a/26707753 copy.find("input") .each(function () { var $field = $(this); if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) { if ($field.prop("checked")) { $field.attr("checked", "checked"); } } else { $field.attr("value", $field.val()); } }); copy.find("select").each(function () { var $field = $(this); $field.find(":selected").attr("selected", "selected"); }); copy.find("textarea").each(function () { // Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589 var $field = $(this); $field.text($field.val()); }); } // Get the HTML markup string var content = copy.html(); // Notify with generated markup & cloned elements - useful for logging, etc try { options.deferred.notify('generated_markup', content, copy); } catch (err) { console.warn('Error notifying deferred', err); } // Destroy the copy copy.remove(); if (options.iframe) { // Use an iframe for printing try { var $iframe = $(options.iframe + ""); var iframeCount = $iframe.length; if (iframeCount === 0) { // Create a new iFrame if none is given $iframe = $('') .prependTo('body') .css({ "position": "absolute", "top": -999, "left": -999 }); } var w, wdoc; w = $iframe.get(0); w = w.contentWindow || w.contentDocument || w; wdoc = w.document || w.contentDocument || w; wdoc.open(); wdoc.write(content); wdoc.close(); printFrame(w) .done(function () { // Success setTimeout(function () { // Wait for IE if (iframeCount === 0) { // Destroy the iframe if created here $iframe.remove(); } }, 100); }) .fail(function (err) { // Use the pop-up method if iframe fails for some reason console.error("Failed to print from iframe", err); printContentInNewWindow(content); }) .always(function () { try { options.deferred.resolve(); } catch (err) { console.warn('Error notifying deferred', err); } }); } catch (e) { // Use the pop-up method if iframe fails for some reason console.error("Failed to print from iframe", e.stack, e.message); printContentInNewWindow(content) .always(function () { try { options.deferred.resolve(); } catch (err) { console.warn('Error notifying deferred', err); } }); } } else { // Use a new window for printing printContentInNewWindow(content) .always(function () { try { options.deferred.resolve(); } catch (err) { console.warn('Error notifying deferred', err); } }); } return this; };})(jQuery);
View Code

 

 

使用方法:

引用文件:

<
script
type
=
"text/javascript"
src
=
"js/jquery.min.js"
></
script
>
<
script
type
=
"text/javascript"
src
=
"js/jquery.print.js"
></
script
>     
 
 
打印内容:

$("#myElementId").print(/*options*/);

或者

$.print("#myElementId"/*, options*/);

 

 

配置参数:

$(
"#myElementId"
).print({
    
globalStyles:
true
,
    
mediaPrint:
false
,
    
stylesheet:
null
,
    
noPrintSelector:
".no-print"
,
    
iframe:
true
,
    
append:
null
,
    
prepend:
null
,
    
manuallyCopyFormValues:
true
,
    
deferred: $.Deferred()
});        
 
 
参数说明:
 
参数 默认值 接收值 描述
globalStyles true Boolean 是否包含父文档的样式
mediaPrint false Boolean 是否包含media='print'的链接标签。会被globalStyles选项覆盖
stylesheet null URL-string 外部样式表的URL地址
noPrintSelector ".no-print" 任何可用的jQuery选择器 不想打印的元素的jQuery选择器
iframe 默认true,如果没有iframe选择器被传入会创建一个隐藏的iframe 任何可用的jQuery选择器或Boolean 是否使用一个iframe来替代打印表单的弹出窗口
append/prepend null Boolean 是否将用户更新的表单输入框内容作为打印内容(通过迭代每一个表单元素来实现)
deferred $.Deferred() 任何可用的jQuery.Deferred对象 当打印函数被调用时的jQuery.Deferred对象

 

 

 

使用方法

 

 

 

另一个打印插件

http://www.jq22.com/jquery-info347

转载于:https://www.cnblogs.com/zyx321/p/6639807.html

你可能感兴趣的文章
HTMLayout嵌入原则
查看>>
如何设计一个Java Web MVC框架
查看>>
UVA11456--dp,LIS
查看>>
Android studio安装与配置
查看>>
关于String类的一道面试题
查看>>
php博文目录
查看>>
AcmeAir
查看>>
js xml 读取 方法
查看>>
admob 广告增加
查看>>
sql server smo
查看>>
Python递归实现查找下一个素数
查看>>
AngularJs概述
查看>>
Swift Modules for React Native
查看>>
缠中说禅:教你炒股票108课(转载)
查看>>
JavaWeb的编码问题
查看>>
从linux启动到rootfs的挂载分析
查看>>
python 求最大数
查看>>
【R统计】多类别的判别
查看>>
踩坑之mongodb配置文件修改
查看>>
iptables
查看>>