elementUI的table表格列宽自适应内容宽度

之前在项目中碰到类似需求

 elementUI的table如果写死列宽的没法达到这个效果,百度说用什么插件的,很多人说会出现一些奇奇怪怪的问题

elementUI的table表格列宽自适应内容宽度_第1张图片

但是如果不写列宽,table会平均分配每个列的宽度,如果列名过长也会导致表格很难看,且达不到所想要的效果,后随即通过动态绑定width实现

 1.在页面UI中

            

2.methods中

 

  // table自适应列宽
    getAdaptionWidth(prop,tableData){
      // 接收两个参数 prop为列的属性值  tableData为表格数据源
      prop = prop + ''
      // 判断传递的数据是否可用
      if (!Array.isArray(tableData) || tableData.length === 0 ) {
        return
      }
      if (!prop || !prop.length || prop.length === 0 || prop === undefined || prop === null) {
        return
      } 
        let columnContent = ''
        // 获取该列中最长的数据(内容)
        let index = 0
        for (let i = 0; i < tableData.length; i++) {
          if (tableData[i][prop] === null) {
            return
          }
          const now_text = tableData[i][prop] + ''
          const max_text = tableData[index][prop] + ''
          
          if (now_text.length > max_text.length) {
            index = i
          }
        }
        // 获取到的最长的列的内容
        columnContent = tableData[index][prop] 
        console.log(columnContent,'列宽是多少');
      // // 以下分配的单位长度可根据实际需求进行调整
      let columnWidth = 0
      for (const char of columnContent) {
        if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
          // 如果是英文字符,为字符分配10个单位宽度
          columnWidth += 10
        } else if (char >= '\u4e00' && char <= '\u9fa5') {
          // 如果是中文字符,为字符分配20个单位宽度
          columnWidth += 20
        } else {
          // 其他种类字符,为字符分配10个单位宽度
          columnWidth += 10
        }
      }
      if (columnWidth < 80) {
        // 设置最小宽度
        columnWidth = 80
      }
      if (columnWidth > 260) {
        // 设置最大宽度
        columnWidth = 260
      }
      return columnWidth + 'px'
    },

elementUI的table表格列宽自适应内容宽度_第2张图片

 我这里最长的字符是这个,每个汉子20像素,、是10像素,所以这个列宽是110像素

注:如果你的prop是xxx.yyy可能会报错哦!

都已经给大家注释好啦,直接复制使用即可,欢迎大佬指点!

你可能感兴趣的:(elementui,vue.js,javascript)