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 相关文章推荐
Angularjs 基础入门
Dec 26 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
node.js基础知识小结
Feb 26 Javascript
关于Vue组件库开发详析
Jul 01 Javascript
tweenjs缓动算法的使用实例分析
Aug 26 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 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中str_replace函数使用小结
2008/10/11 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Python查找相似单词的方法
2015/03/05 Python
python fabric实现远程部署
2017/01/05 Python
Python使用functools实现注解同步方法
2018/02/06 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
keras输出预测值和真实值方式
2020/06/27 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
SQL语言面试题
2013/08/27 面试题
硕士生工作推荐信
2014/03/07 职场文书
社区母亲节活动总结
2015/02/10 职场文书
小学班主任个人总结
2015/03/03 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
python基础之函数的定义和调用
2021/10/24 Python