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 相关文章推荐
不懂JavaScript应该怎样学
Apr 16 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
JS的document.all函数使用示例
Dec 30 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
有关Promises异步问题详解
Nov 13 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
整理关于Bootstrap过渡动画的慕课笔记
Mar 29 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
vue element upload组件 file-list的动态绑定实现
Oct 11 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
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
PHP JSON 数据解析代码
2010/05/26 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
微信小程序 开发之全局配置
2017/05/05 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
node内置调试方法总结
2018/02/22 Javascript
react redux入门示例
2018/04/19 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Numpy之reshape()使用详解
2019/12/26 Python
Python __slots__的使用方法
2020/11/15 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
毕业生求职简历的自我评价
2013/10/23 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
业务内勤岗位职责
2015/04/13 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
《失物招领》教学反思
2016/02/20 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB