web建站教程
     
  1. 首页
  2. 前端UI组件库
  3. AI项目和框架
  4. AIGC工具
  5. 百度echarts
  6. 地图大全
  7. 前端知识
  8. 更多
    vuejs
    js入门
    php入门
    mysql
    wordpress
    织梦cms
    帝国cms
    git教程
    IT知识
    模板大全
    休息站
    AI应用

jquery利用插件实现局部打印,完成后执行回调方法

973 ℃

如何利用jquery插件实现div局部打印,完成后执行回调方法,下面web建站小编给大家简单介绍一下插件代码!

print.js插件代码如下:

(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 = $("<span />")
        .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)) {
            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) {
    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, $('<link rel="stylesheet" href="' + options.stylesheet + '">'));
    }
    // Create a copy of the element to print
    var copy = $this.clone();
    // Wrap it in a span to get the HTML markup string
    copy = $("<span/>")
      .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 () {
        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 = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>')
            .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);

打印完成后实现回调:

//因为当前页面有多个打印,只在一个地方执行回调,所以定义了一个方法
//在第35行插入以下语句
if(printDialog == 1){
  location.reload(true)
}

调用方法:

$("#div").print();

js语法删除多余的p > a[onclick]标签

PouchDB:一款基于JavaScript 的开源NoSQL文档数据库

PC端如何实现将网站添加到桌面的功能

javascript实现复制div文本内容(实测有效)

JavaScript获取指定网站状态码查询代码(2种实现方法)

标签: jquery局部打印 jquery打印回调 jquery打印插件

上面是“jquery利用插件实现局部打印,完成后执行回调方法”的全面内容,想了解更多关于 js 内容,请继续关注web建站教程。

当前网址:https://ipkd.cn/webs_3860.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

当前位置: 首页 > js
Trae:新一代免费的AI编程工具

在线育儿补贴计算器

快来看看你到底可以领到多少补贴!生活小工具
上一篇:
下一篇:
x 打工人ai神器