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

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动态生成表格后 合并单元格

时间: 2024-12-17 16:58:53

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

js动态生成表格(原创)

原文:js动态生成表格(原创) 源代码下载地址:http://www.zuidaima.com/share/1571860936543232.htm 原生js实现,兼容各主流浏览器,提供生成表格,修改表格,验证合法性功能,可做学习参考 版权声明:本文为博主原创文章,未经博主允许不得转载.

LaTeX 绘制表格时合并单元格

使用 LaTeX 绘制表格时合并单元格,使用: \multicolumn{2} {|c|} { XXX内容 } 如: \begin{center} \begin{tabular}{|c|c|c|c|c|c|c|} \hline 显著性水平 & \multicolumn{2}{|c|}{$\leq0.01$} & \multicolumn{2}{|c|}{$\leq0.05$} & \multicolumn{2}{|c|}{$\leq0.1$}\\\hline 数据集 & $

前端页面表格实现合并单元格

做报表,查询的时候,经常用到表格. 页面展示多条数据时,时常表格的第一列都是相同的,所以合并单元格,让表格看起来更直观. 写这个函数,其它js里面直接调用unionTab (tb,collength);其中第一个参数tb为表格ID,第二个参数为你想要进行单元格合并的表格列数. 缺点:只能实现前N列,不能实现某一列实现合并. /**/ window.unionTab = function (tb, colLength) { var id = tb; tb = $("#" + tb).ge

使用JS遍历Table表格中所有单元格内容

通过JS去遍历Table的所有单元格中的内容,可以用如下JS代码实现:使用该方法时必须为Table表格设置唯一的id属性. function GetInfoFromTable() { var tableInfo = ""; var tableObj = document.getElementByIdx_x("tableid"); //获取表格对象 for (var i = 0; i < tableObj.rows.length; i++) { //遍历Tabl

NPOI_winfrom导出Excel表格(合并单元格、规定范围加外边框、存储路径弹框选择)

1.导出 1 private void btn_print_Click(object sender, EventArgs e) 2 { 3 DataTable dtNew = new DataTable(); 4 5 dtNew.Columns.Add(new DataColumn("commodity_name", typeof(object))); 6 dtNew.Columns.Add(new DataColumn("specifications", type

js动态生成表格

下面用js实现可以生成用户所需行数的表格. 1.首先在body中填入下列代码,获取用户填入的行数值 1 <table> 2 <tr> 3 <td>动态生成表格</td> 4 <td><input id="Cold" type="text" class="input" size="10" name="Num"/>行</td>

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

主要原因:在页面给元素注册点击事件的时候[ $(function () {  XXX }); ],JS动态生成的元素还尚未生成,所以click事件就没有生效 解决方法: 方案一:js动态生成元素后再给其注册事件 [注册事件放在动态生成的js下面(js是从上往下执行的,当注册事件的时候元素已经生成了,就不会出现注册失效的现象了)] 话比较抽象举个例子: 方案二:js动态生成元素的时候给他加上 onClick之类的方法  举个例子: 如果你又更好的方案,那小子受教了~~

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

吐槽 今天,在vue中遇到 复杂表格的渲染 ,需要合并表头th的单元格,且合并单元格的那列的表头数据是动态数据,也就是不知道会有多少个表头列,而这几个表头列还分了好几个子表头. 这个需求在js里用Juicer模板很好做的,思路我是有的,但就是对于vue,我也算初学者,很多概念不是很懂,这就限制了思路. 在网上搜了很多合并单元格的都是简单的数据合并,也就是td合并, 不是我们的需求,就不贴了. 哎,废话不多说了,看代码吧: 代码示例 使用iviewui的table组件: 最初,直接使用项目中的iv

js 动态合并单元格并求和

需求:相同的产品名称,要合并单元格,并计算出相同产品总共消耗多少标煤. function autoRowSpan(tb, row, col) { var lastValue = ""; var value = ""; var pos = 1; var tdSum = 0; var cellValue = 0; for (var i = row; i < tb.rows.length; i++) { value = tb.rows[i].cells[col].i