elementui表格复制_element-ui 表格打印

打印需要用到的组件为 print-js

普通表格打印

一般的表格打印直接仿照组件提供的例子就可以了。

printJS({

printable: id, // DOM id

type: 'html',

scanStyles: false,

})

element-ui 表格打印

element-ui 的表格,表面上看起来是一个表格,实际上是由两个表格组成的。

表头为一个表格,表体又是个表格,这就导致了一个问题:打印的时候表体和表头错位。

88678b57f69c5c9d783ffbf8479e4c7d.png

另外,在表格出现滚动条的时候,也会造成错位。

a0e020c5653057d9ea083e31fdfdfe3f.png

解决方案

我的思路是将两个表格合成一个表格,print-js 组件打印的时候,实际上是把 id 对应的 DOM 里的内容提取出来打印。

所以,在传入 id 之前,可以先把表头所在的表格内容提取出来,插入到第二个表格里,从而将两个表格合并,这时候打印就不会有错位的问题了。

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 = '

'

for (let i = 0, len = ThsTextArry.length; i < len; i++) {

newHTML += '

' + ThsTextArry[i] + ''

}

newHTML += '

'

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()

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值