介绍修正表格表头,固定列错位
el-table表头怎么根据内容实现自适应吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
将代码复制到指令中即可使用。通过指令方式进行调用。(使用方式& lt; el-table v-tableFit> & lt;/el-table>)
通过计算文字的宽度进行表头设置,其他内容无法计算。
5000个单元格以上根据实际情况使用以上根据实际情况使用,因为单元格越多,计算时间越长。
尽量使用v,不然有些情况下会计算错误。
Vue.directive (“tableFit",, { ,//指令所在组件的,VNode 及其子,VNode 全部更新后调用。 ,componentUpdated (el,绑定,vnode), { setTimeout(才能(),=祝辞,{ ,,adjustColumnWidth (el, vnode); ,,},0) }, }); function adjustColumnWidth(表,vnode), { ,//中文和全角正则 ,const CN =, new 正则表达式(“[\ u4E00 - \ u9FA5] | [^ \ uFF00 - \ uFFFF]“); ,const NUM =, new 正则表达式(“[0 - 9]“); ,//中文字体的像素宽度比例 ,const CN_RATE =1.1 ,//数字字体的像素宽度比例 ,const NUM_RATE =0.65 ,//其他字体的像素宽度比例 ,const OTHER_RATE =0.5 , ,const columns =, vnode.child.columns.slice () ,//el-table通过colgroup标指定表格中签设置html宽度 ,const colgroup =, table.querySelector (“colgroup"); ,const colDefs =, […] colgroup.querySelectorAll (“col")]; ,//忽略,设置了宽度,序号,多选框,的列 ,//判断地沟是否已存在 ,const gutter =, colgroup.querySelector (col [name=地沟]) ,const gutterx =, colgroup.querySelector (col [name=gutterx]) ,let except =0 ,if (gutter | |, gutterx), {//才能删除排水沟 colDefs.pop才能() ,} ,//若有序号,多选框则删除=,,except  colDefs.length 作用;columns.length ,colDefs.splice(0,除外) ,for (let 小姐:=,columns.length 作用;1;,小姐:祝辞=,0;,我——),{ if 才能;(列[我].width), { ,,colDefs.splice(我,1) ,,columns.splice(我,1) ,,} ,} ,//设置每列宽度 ,colDefs.forEach((坳,指数),=祝辞,{//colgroup中指定表格中才能,和,表头标签的类名相同,通过类寻找相同列 const 才能;clsName =, col.getAttribute (“name"); const 才能;cells =, ( ,,…table.querySelectorAll (“.el-table__body-wrapper td。$ {clsName}”), ,,…table.querySelectorAll (th。$ {clsName} '), )才能; const 才能;widthList =, cells.map ((el),=祝辞,{ ,,const cell =, el.querySelector (“.cell") ,,if (细胞),{ ,,,let fontSize =,方法(window.getComputedStyle(细胞,null) .fontSize) ,,,fontSize =, fontSize ?, fontSize : 14 ,,,let width =0 ,,,//计算每个字符的宽度 ,,,(let str  of cell.innerText), { ,,,,如果(CN.test (str)), { ,,,,,width +=, fontSize * CN_RATE ,,,,}else 如果(NUM.test (str)), { ,,,,,width +=, fontSize * NUM_RATE ,,,,}else { ,,,,,width +=, fontSize * OTHER_RATE ,,,,} ,,,} ,,,return Math.ceil(宽度) ,,},{else ,,return 0 ,,} ,,}); ,,//取才能一列中的最大宽度 const 才能;max =, Math.max (…widthList); if 才能;(max !==, 0), { ,,//在表格数据中设置minWidth 防止尺寸变化重新计算原来的宽度 ,,//20,+,2,,20,是细胞类的padding 2,是给予额外空间 (指数),才能列.minWidth =max +, 22 ,,table.querySelectorAll(“坳[name=$ {clsName}] ') .forEach ((el),=祝辞,{ ,,,el.setAttribute (“width",, max +, 22); ,,}); ,,} ,}); ,//设置完后调用el-table方法更新布的局 ,vnode.child.doLayout () ,tableRevise(表) }
修正表格表头,固定列错位
没有错位的可以忽略
//修正el-table错位 function tableRevise(表),{ ,const tableWrapper =, table.querySelector (& # 39; .el-table__body-wrapper& # 39;) ,const tableBody =, table.querySelector (& # 39; .el-table__body& # 39;) ,const colgroup =, table.querySelector (“colgroup");/* * ,,*,(以下数值为滚动条高度,可以自己根据情况通过类重新修改) ,*/,//内容大于容器时 ,if (tableBody.clientWidth 祝辞,tableWrapper.offsetWidth), { ,,//才能设置x轴滚动 null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullel-table表头怎么根据内容实现自适应