el-table表头怎么根据内容实现自适应

  介绍

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   null

el-table表头怎么根据内容实现自适应