JS动态生成表格后 合并单元格

最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单元格操作,在做之前也试着google下,但是网上没有碰到这方面的需求,所以自己写了一个简单的。用文字描述需求太费劲了,如下图所示:

1. 没有合并之前的图如下:

2. 合并之后的图如下:

如上所示:是根据相邻的编号相同 进行单元格合并。

先看看实现后的效果再聊吧!

JSfiddle链接地址如下:

点击我查看效果!

实现思路: 动态生成数据,那么需要合并的单元格先不动态生成,等数据渲染完成后,再去做如下操作:

1. 遍历所有tr标签,获取所有的编号存入数组里面去,并且对数组进行去重操作。

2. 循环去重后的新数组,再去循环tr标签,分别获取当前tr上的编号和长度属性,然后tr中的编号与循环后的新数组某项是否相等,如果相等的话,那么在当前的tr前插入td单元格且加上rowspan属性。

3. 使用break语句,跳出当前的for循环,进入新数组下一次循环,目的是:只取tr相同的项的第一项插入合并后的单元格。

HTML代码在此不贴代码,要看的话 去jsfiddle效果里面去看。

所有JS代码如下:

//去掉数组重复项
function unique(arr){
arr = arr || [];
var obj = {},
ret = [];
for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
var curItem = arr[i],
curItemType = typeof(curItem) + curItem;
if(obj[curItemType] !== 1) {
ret.push(curItem);
obj[curItemType] = 1;
}
}
return ret;
}
/**
$.ajax({ });**/
// 假如返回数据如下:
var data = [{'key':[{'num1':'001','n2':'4','n3':'5'}]},
{'key':[{'num1':'002','n2':'44','n3':'55'},{'num1':'002','n2':'44','n3':'55'}]},
{'key':[{'num1':'003','n2':'444','n3':'555'},{'num1':'003','n2':'444','n3':'555'}]},
{'key':[{'num1':'004','n2':'666','n3':'666'},{'num1':'004','n2':'666','n3':'666'}]}
];
html = ""; $('#j-tbody').html('');
for(var i = 0; i < data.length; i++) { for(var j = 0; j < data[i].key.length; j++) {
html += '<tr class="j-number" data-num="'+data[i].key[j].num1+'" data-len="'+data[i].key.length+'">'+
/*'<td>'+data[i].key[j].num1+'</td>'+ */
'<td>'+data[i].key[j].n2+'</td>'+
'<td>'+data[i].key[j].n3+'</td>'+
'</tr>';
}
}
$("#j-tbody").html(html); var rets = [];
// 遍历tr 获取属性 data-num
$('.j-number').each(function(){
var num = $(this).attr('data-num');
rets.push(num);
});
var newArrs = unique(rets),
domElems = $('.j-number'); // 再次遍历新数组
for(var m = 0; m < newArrs.length; m++) {
for(var n = 0; n < domElems.length; n++) {
var elemNum = $(domElems[n]).attr('data-num'),
elemLen = $(domElems[n]).attr('data-len');
if(newArrs[m] == elemNum) {
var td = '<td rowspan="'+elemLen+'">'+elemNum+'</td>';
$(domElems[n]).prepend(td);
break;
}
}
}

JS动态生成表格后 合并单元格的更多相关文章

  1. poi生成表格自动合并单元格

    直接复制这个工具类即可使用: /** * 合并单元格 * @author tongyao * @param sheet sheet页 * @param titleColumn 标题占用行 * @par ...

  2. js 动态生成表格案例

    <1>布局:一个table表格,表格分为两个部分,上面是thead表头,表头里面仅一行,有4列(th),   下面是tbody表格内容,要求tbody中的每一行都是用js动态创建的 < ...

  3. js动态生成表格

    动态生成表格           *创建一个页面:两个输入框和一个按钮 *代码和步骤                      /*                          1.得到输入的行 ...

  4. layui:数据表格如何合并单元格

    layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...

  5. layui 动态表格之合并单元格

    需求: 下面用excel表格大概模拟下需求,左边是原来的,要改成右边这样的: ①第一步:再生成表格后调用此方法,以合并重复的单元格 done : function(res, curr, count) ...

  6. js动态加载数据并合并单元格

    js动态加载数据合并单元格, 代码如下所示,可复制直接运行: <!DOCTYPE HTML> <html lang="en-US"> <head> ...

  7. JS动态生成的元素,其对应的方法不响应(比如单击事件,鼠标移动事件等)

    主要原因:在页面给元素注册点击事件的时候[ $(function () {  XXX }); ],JS动态生成的元素还尚未生成,所以click事件就没有生效 解决方法: 方案一:js动态生成元素后再给 ...

  8. vue中 表头 th 合并单元格,且表格列数不定的动态渲染方法

    吐槽 今天,在vue中遇到 复杂表格的渲染 ,需要合并表头th的单元格,且合并单元格的那列的表头数据是动态数据,也就是不知道会有多少个表头列,而这几个表头列还分了好几个子表头. 这个需求在js里用Ju ...

  9. vue中 表头th 合并单元格,且表格列数不定的动态渲染方法

    吐槽 今天,在vue中遇到 复杂表格的渲染 ,需要合并表头的单元格,且合并单元格的那列还是动态数据,也就是说你不知道会有多少组要合并起来,哎,我也有点说不清楚,废话不多说了,看代码把: 代码示例 da ...

随机推荐

  1. Java面试中遇到的坑【填坑篇】

    看到大家对上篇<Java面试中遇到的坑>一文表现出强力的关注度,说明大家确实在面试中遇到了类似的难题.大家在文章留言处积极留言探讨面试中遇到的问题,其中几位同学还提出了自己的见解,我感到非 ...

  2. 记录常用的git命令

    之前的公司都是用svn的,现在的公司用git了,所以现在记录一下所用到的git命令,方便以后查看! git 常用命令 git add git add 命令可将该文件添加到缓存 git add . // ...

  3. SQLite 数据库增删改查

    布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  4. 代码操作Word时,目录自动更新的两种方法

    最近的项目中有一个功能点为:根据分析数据库并生成报告.不过不是大数据.数据挖掘之类,报告的内容.组织方式都是事先固定下来的.实现的方式为,在普通word文档中插入书签制成模板,然后程序使用OpenXM ...

  5. 学习git踩坑之路

    第一次使用git: 1.使用CentOS Linux release 7.3.1611 (Core),内核版本3.10.0-514.el7.x86_64 2.安装git: root权限运行:yum   ...

  6. 团队项目个人进展——Day06

    一.昨天工作总结 冲刺第六天,深入学习了小程序官方文档,并看了几节小程序教程的视频 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问题 三.今日工作规划 学习微信小程序中WebSocke ...

  7. 从零自学Java-6.使用循环重复执行操作

    1.使用for循环: 2.使用while循环: 3.使用do-while循环: 4.提早退出循环(break,continue): 5.为循环命名. 程序Nines:显示1-200的整数与9的乘积 p ...

  8. MSCRM2016 取消邮箱强制SSL

    在新建电子邮件服务器配置文件时Advanced中的Use SSL for Incoming/Outgoing Connection默认都是启用的而且无法编辑,启用SSL当然是为了安全的考虑,但当客户的 ...

  9. 推荐linux下的数据库开发工具DBeaver 开源免费

    linux下不错的数据库管理工具 DBeaver 操作比较友好,基于eclipse.使用jdbc链接,链接数据库非常全(oracle mysql mssql sqlite  常见的统统支持).而且可以 ...

  10. CISCO ASA 5505 经典配置案例

    nterface Vlan2 nameif outside  ----------------------------------------对端口命名外端口  security-level 0 -- ...