element-ui table span-method(行合并)的实现代码


Posted in Javascript onDecember 20, 2018

element-ui官网中关于行合并的例子是根据行号进行合并的,这显然不符合我们日常开发需求,因为通常我们table中的数据都是动态生成的,所以需要做一些修改。我们首先解读一下官网实例中的各参数的意义:

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) {  //用于设置要合并的列
     if (rowIndex % 2 === 0) {  //用于设置合并开始的行号
      return {
       rowspan: 2,
 //合并的行数
       colspan: 1     //合并的列数,设为0则直接不显示
      };
     } else {
      return {
       rowspan: 0,
       colspan: 0
      };
     }
    }
   }

研究这个例子后不难发现,实现合并行的方法其实在每一行数据渲染的时候都会执行,只不过在渲染过程中我们设置了它合并的行数和列数,以得到不同的效果。所以我们需要生成一个与行数相同的数组记录每一行设置的合并数。处理过程如下:

getSpanArr(data) { 
 for (var i = 0; i < data.length; i++) {
    if (i === 0) {
       this.spanArr.push(1);
       this.pos = 0
    } else {
     // 判断当前元素与上一个元素是否相同
  if (data[i].name === data[i - 1].name) {
        this.spanArr[this.pos] += 1;
        this.spanArr.push(0);
       } else {
        this.spanArr.push(1);
        this.pos = i;
       }
    }
  }
},

data就是我们从后台拿到的数据,通常是一个数组;spanArr是一个空的数组,用于存放每一行记录的合并数;pos是spanArr的索引。上述代码意思是:如果是第一条记录(索引为0),向数组中加入1,并设置索引位置;如果不是第一条记录,则判断它与前一条记录是否相等,如果相等,则向spanArr中添入元素0,并将前一位元素+1,表示合并行数+1,以此往复,得到所有行的合并数,0即表示该行不显示。

cellMerge({ row, column, rowIndex, columnIndex }) {
   if (columnIndex === 0) {
      const _row = this.spanArr[rowIndex];
      const _col = _row > 0 ? 1 : 0;
      return {
         rowspan: _row,
         colspan: _col
      }
   }
},

然后根据得到的数组spanArr对表格进行合并渲染,并绑定合并方法

<el-table
   border
   :data="tableData"
   style="width: 100%;max-height: 160px;overflow: auto"
   :span-method="cellMerge">
  ......
</el-table>

效果图如下:

element-ui table span-method(行合并)的实现代码

注:后台获取数据的时候根据要在前台进行合并的字段进行排序,使要合并的字段值相同的记录依次相邻。

合并多行的情况

arraySpanMethod ({ row, column, rowIndex, columnIndex }) {
   if (rowIndex === 1) {
    // 合并第二行
    if (columnIndex === 1) {
     // 从第二列开始
     return [2, 3]
     // 这里返回的是行和列的合并数量,可以返回一个数组,也可以返回一个对象,效果一样
     // 这里rowspan为2是行有两行合并,colspan为3是列有3列合并,你要合并几行几列就写上相应的数字

     // 这个判断是把第一行的第3列,第4列的值省略,在合并的表格右边直接填原先第5列的值,合并了几列,就省略几列的值
    } else if (columnIndex === 2 || columnIndex === 3) {
     return [0, 0]
    }
   } else if (rowIndex === 2 && (columnIndex === 1 || columnIndex === 2 || columnIndex === 3)) {
    // 第二行的第2个数,第3个数,第4个数都要省略
    return [0, 0]
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
three.js中文文档学习之如何本地运行详解
Nov 20 Javascript
jQuery实现左右滑动的toggle方法
Mar 03 jQuery
详解从Vue-router到html5的pushState
Jul 21 Javascript
vue封装swiper代码实例解析
Oct 08 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
cypress测试本地web应用
Jun 01 Javascript
fetch 如何实现请求数据
Dec 20 #Javascript
JS闭包经典实例详解
Dec 20 #Javascript
JS闭包原理与应用经典示例
Dec 20 #Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 #Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 #Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 #Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 #Javascript
You might like
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
微信小程序 上传头像的实例详解
2017/10/27 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python编写分类决策树的代码
2017/12/21 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
python如何删除文件中重复的字段
2019/07/16 Python
python框架django项目部署相关知识详解
2019/11/04 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
建筑管理专业求职信
2014/07/28 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
材料物理专业求职信
2014/09/01 职场文书
护士工作失误检讨书
2014/09/14 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
考试后的感想
2015/08/07 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Python+Appium自动化测试的实战
2021/06/30 Python