vue通过数据过滤实现表格合并


Posted in Javascript onNovember 30, 2020

基于vue通过数据过滤实现表格合并,供大家参考,具体内容如下

需求

  • 基于vue渲染的数据表格
  • 需要对相同的列进行合并

思路

自从使用了vue,就再也不想直接操作dom节点了,所以还是对数据操作。

要合并单元格需要用到rowspan属性,所有想法是针对数据添加rowspan属性使其多行显示,但下面的行再去渲染就重复了,所以用hidden 隐藏掉。

所以,针对每一行数据 ,用rowspan和display来控制每一个单元格的合并行数和是否显示

代码

<table id="search_table" class="table table-bordered table-striped" cellspacing="0" width="100%">
 <thead>
 <tr class="table_bg">
 <th class="" colspan="12">征期日历信息</th>
 </tr>
 <tr class="cell_bg">
 <th class="" style="">月份</th>
 <th class="" style="" >征期</th>
 <th class="" style="" >缴款期</th>
 <th class="" style="" >税种</th>
 </tr>
 </thead>
 <tbody id="tbody">

 <tr class="" v-for="(i,index) in result">
 <td :rowspan="i.ydspan" :class="{hidden: i.yddis}" class="text-center">
 {{i.yd}}
 </td>
 <td :rowspan="i.zqspan" :class="{hidden: i.zqdis}">
 {{i.zq}}
 </td>
 <td <%--:rowspan="i.jkqspan" :class="{hidden: i.jkqdis}"--%>>
 {{i.jkq}}
 </td>
 <td>
 {{i.sz}}
 </td>
 </tr>
 </tbody>
</table>

这里,对需要合并的单元格添加 :rowspan=”i.ydspan” :class=”{hidden: i.yddis}”

接着,设计一个算法,对用于渲染table渲染的数组,每个数据项添加两个属性,rowspan和hidden,计算出rowspan的值为 本列中该 值相同的行数,(当然,数据在sql中是经过group by的)以及依据rowspan的值计算hidden的值是否显示true/false,最后将此改变后的数组输出。

然而 ,需求是复杂的。

 vue通过数据过滤实现表格合并

如图,要求第二列不能跨过第一列的维度合并,所以,没有办法一劳永逸,只能分别处理

先对月份处理,再对征期处理。

talk is cheap ,show you the code。

号称是算法,就俩for 循环

combineZQ:function (list) {
 var k = 0;
 let field ="zq";
 while (k < list.length) {
 list[k][field + 'span'] = 1;
 list[k][field + 'dis'] = false;
 for (var i = k + 1; i <= list.length - 1; i++) {
 if (list[k][field] == list[i][field] && list[k][field] != ''&&list[k]['yd']==list[i]['yd']&&list[k]['yd']!='') {
 list[k][field + 'span']++;
 list[k][field + 'dis'] = false;
 list[i][field + 'span'] = 1;
 list[i][field + 'dis'] = true;
  } else {
  break;
 }
 }
 k = i;
 }
 return list;
},

名字是拼音没毛病,我也不想,人家大公司的规范(-,-)

combineYd:function (list) {
 var k = 0;
 let field ="yd";
 while (k < list.length) {
 list[k][field + 'span'] = 1;
 list[k][field + 'dis'] = false;
 for (var i = k + 1; i <= list.length - 1; i++) {
 if (list[k][field] == list[i][field] && list[k][field] != '') {
  list[k][field + 'span']++;
  list[k][field + 'dis'] = false;
  list[i][field + 'span'] = 1;
  list[i][field + 'dis'] = true;
  } else {
 break;
 }
 }
 k = i;
 }
 return list;
},

然后。

vue通过数据过滤实现表格合并

这样就搞定了。

效果图: 这里前两列进行了合并

vue通过数据过滤实现表格合并

就是这样,by 一位即将成为 前端 的 后台程序员

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

Javascript 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
jquery下checked取值问题的解决方法
Aug 09 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
js document.write()使用介绍
Feb 21 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
浅析BootStrap模态框的使用(经典)
Apr 29 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
JS继承最简单的理解方式
Mar 31 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 #Javascript
小程序分页实践之编写可复用分页组件
Jul 18 #Javascript
在vue项目中使用sass语法问题
Jul 18 #Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 #Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
Jul 18 #Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
Jul 18 #Javascript
jquery实现下载图片功能
Jul 18 #jQuery
You might like
利用js调用后台php进行数据处理原码
2006/10/09 PHP
js定时器的使用(实例讲解)
2014/01/06 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
python之import机制详解
2014/07/03 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
详解python中的线程
2018/02/10 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python tornado微信开发入门代码
2018/08/24 Python
python如何调用字典的key
2020/05/25 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
电子商务个人自荐信
2013/12/12 职场文书
高一学生评语大全
2014/04/25 职场文书
小学生环保倡议书
2014/05/15 职场文书
网络营销策划方案
2014/06/04 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
工程款催款函
2015/06/24 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python