打印須要用到的組件爲 print-jshtml
通常的表格打印直接仿照組件提供的例子就能夠了。git
printJS({ printable: id, // DOM id type: 'html', scanStyles: false, })
element-ui 的表格,表面上看起來是一個表格,其實是由兩個表格組成的。github
表頭爲一個表格,表體又是個表格,這就致使了一個問題:打印的時候表體和表頭錯位。
另外,在表格出現滾動條的時候,也會形成錯位。element-ui
個人思路是將兩個表格合成一個表格,print-js
組件打印的時候,其實是把 id 對應的 DOM 裏的內容提取出來打印。
因此,在傳入 id 以前,能夠先把表頭所在的表格內容提取出來,插入到第二個表格裏,從而將兩個表格合併,這時候打印就不會有錯位的問題了。app
function printHTML(id) { const html = document.querySelector('#' + id).innerHTML // 新建一個 DOM const div = document.createElement('div') const printDOMID = 'printDOMElement' div.id = printDOMID div.innerHTML = html // 提取第一個表格的內容 即表頭 const ths = div.querySelectorAll('.el-table__header-wrapper th') const ThsTextArry = [] for (let i = 0, len = ths.length; i < len; i++) { if (ths[i].innerText !== '') ThsTextArry.push(ths[i].innerText) } // 刪除多餘的表頭 div.querySelector('.hidden-columns').remove() // 第一個表格的內容提取出來後已經沒用了 刪掉 div.querySelector('.el-table__header-wrapper').remove() // 將第一個表格的內容插入到第二個表格 let newHTML = '<tr>' for (let i = 0, len = ThsTextArry.length; i < len; i++) { newHTML += '<td style="text-align: center; font-weight: bold">' + ThsTextArry[i] + '</td>' } newHTML += '</tr>' div.querySelector('.el-table__body-wrapper table').insertAdjacentHTML('afterbegin', newHTML) // 將新的 DIV 添加到頁面 打印後再刪掉 document.querySelector('body').appendChild(div) printJS({ printable: printDOMID, type: 'html', scanStyles: false, style: 'table { border-collapse: collapse }' // 表格樣式 }) div.remove() }