Legendary

李洋的学习笔记


打印

<pre><code>const Print = function (dom, options) {   if (!(this instanceof Print)) return new Print(dom, options);   this.options = this.extend(     {       noPrint: '.no-print'     },     options   );   if (typeof dom === 'string') {     this.dom = document.querySelector(dom);   } else {     this.isDOM(dom);     this.dom = this.isDOM(dom) ? dom : dom.$el;   }   this.init(); }; Print.prototype = {   init: function () {     var content = this.getStyle() + this.getHtml();     this.writeIframe(content);   },   extend: function (obj, obj2) {     for (var k in obj2) {       obj[k] = obj2[k];     }     return obj;   },   getStyle: function () {     var str = '',       styles = document.querySelectorAll('style,link');     for (var i = 0; i &lt; styles.length; i++) {       str += styles[i].outerHTML;     }     str += '&lt;style&gt;' + (this.options.noPrint ? this.options.noPrint : '.no-print') + '{display:none;}&lt;/style&gt;';     str += `&lt;style&gt;       table{         width: 100% !important;         font-size: 12px !important;       }       .el-table__body,       .el-table__header {         width: 100% !important;       }       .el-table__body {         width: 100% !important;       }       .el-table .el-table__cell{         width: 100% !important;       }       colgroup col {         width: 10%;       }       colgroup [name='gutter']{         display: none !important;       }       colgroup col:first-of-type{         width: 6%;       }       .el-table__empty-block{         height:60px !important;       }       .winners-grid{         height:70px !important;       }     &lt;/style&gt;`     return str;   },     getHtml: function () {     var inputs = document.querySelectorAll('input');     var textareas = document.querySelectorAll('textarea');     var selects = document.querySelectorAll('select');     for (var k = 0; k &lt; inputs.length; k++) {       if (inputs[k].type == 'checkbox' || inputs[k].type == 'radio') {         if (inputs[k].checked == true) {           inputs[k].setAttribute('checked', 'checked');         } else {           inputs[k].removeAttribute('checked');         }       } else if (inputs[k].type == 'text') {         inputs[k].setAttribute('value', inputs[k].value);       } else {         inputs[k].setAttribute('value', inputs[k].value);       }     }     for (var k2 = 0; k2 &lt; textareas.length; k2++) {       if (textareas[k2].type == 'textarea') {         textareas[k2].innerHTML = textareas[k2].value;       }     }     for (var k3 = 0; k3 &lt; selects.length; k3++) {       if (selects[k3].type == 'select-one') {         var child = selects[k3].children;         for (var i in child) {           if (child[i].tagName == 'OPTION') {             if (child[i].selected == true) {               child[i].setAttribute('selected', 'selected');             } else {               child[i].removeAttribute('selected');             }           }         }       }     }     return this.dom.outerHTML;   },   writeIframe: function (content) {     var w,       doc,       iframe = document.createElement('iframe'),       f = document.body.appendChild(iframe);     iframe.id = 'myIframe';     iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');     w = f.contentWindow || f.contentDocument;     doc = f.contentDocument || f.contentWindow.document;     doc.open();     doc.write(content);     doc.close();     var _this = this;     iframe.onload = function () {       _this.toPrint(w);       setTimeout(function () {         document.body.removeChild(iframe);       }, 100);     };   },   toPrint: function (frameWindow) {     try {       setTimeout(function () {         frameWindow.focus();         try {           if (!frameWindow.document.execCommand('print', false, null)) {             frameWindow.print();           }         } catch (e) {           frameWindow.print();         }         frameWindow.close();       }, 10);     } catch (err) {       console.log('err', err);     }   },   isDOM:     typeof HTMLElement === 'object'       ? function (obj) {           return obj instanceof HTMLElement;         }       : function (obj) {           return obj &amp;&amp; typeof obj === 'object' &amp;&amp; obj.nodeType === 1 &amp;&amp; typeof obj.nodeName === 'string';         } }; const PrintPlugin = {}; PrintPlugin.install = function (Vue, options) {   Vue.prototype.$print = Print; }; export default PrintPlugin; </code></pre>

页面列表

ITEM_HTML