layui表格合并单元格多表_layui:数据表格如何合并单元格

这篇博客介绍了如何使用layui库来实现表格中多个列的单元格合并。通过定义需要合并的列名和索引,遍历表格数据进行比较,当值相同时增加rowspan属性,并隐藏当前行的单元格,从而实现表格单元格的合并效果。
摘要由CSDN通过智能技术生成

layui.use('table', function () {

var table = layui.table;

table.render({

elem: '#applyTab'

, url: '${cxt}/yptPreferentialApply/detail_data?id=${detailId}'

, cols: [[

{field: 'goodsName', title: '产品名称'}

, {

field: 'priceType', title: '价格类型', templet: function (d) {

switch (d.priceType) {

case "0":

return "免费";

case "1":

return "按次";

case "2":

return "包天";

case "3":

return "包月";

case "4":

return "包年";

case "5":

return "包时";

}

}

}

, {field: 'price', title: '单价'}

, {field: 'discount', title: '折扣(%)'}

, {field: 'preferentialPrice', title: '优惠价格'}

, {field: 'chargeUnit', title: '计价单位'}

]]

, done: function (res, curr, count) {

merge(res, curr, count);

}

});

});

/**

* 合并单元格

* @param res 表格数据

* @param curr 当前页

* @param count 总数

*/

function merge(res, curr, count) {

var data = res.data;

var mergeIndex = 0;//定位需要添加合并属性的行数

var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数

var columsName = ['goodsName'];//需要合并的列名称

var columsIndex = [0];//需要合并的列索引值

for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列

{

var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行

for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据

var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列

var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列

if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并

mark += 1;

tdPreArr.each(function () {//相同列的第一列增加rowspan属性

$(this).attr("rowspan", mark);

});

tdCurArr.each(function () {//当前行隐藏

$(this).css("display", "none");

});

}else {

mergeIndex = i;

mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算

}

}

}

}

多列合并:

/**

* 合并单元格

* @param res 表格数据

* @param curr 当前页

* @param count 总数

*/

function merge(res, curr, count) {

var data = res.data;

//alert(JSON.stringify(data));

var mergeIndex = 0;//定位需要添加合并属性的行数

var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数

var columsName = ['CusID'];//需要合并的列名称

var columsIndex = [0];//需要合并的列索引值

for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列

{

mark = 1;

var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行

for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据

var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列

var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列

if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并

// alert(data[i][columsName[k]]);

mark += 1;

tdPreArr.each(function () {//相同列的第一列增加rowspan属性

$(this).attr("rowspan", mark);

});

tdCurArr.each(function () {//当前行隐藏

$(this).css("display", "none");

});

}else {

mergeIndex = i;

mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算

}

}

}

mergeIndex = 0;//定位需要添加合并属性的行数

mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数

columsName = ['CusName'];//需要合并的列名称

columsIndex = [1];//需要合并的列索引值

for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列

{

mark = 1;

var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行

for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据

var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列

var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列

if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并

// alert(data[i][columsName[k]]);

mark += 1;

tdPreArr.each(function () {//相同列的第一列增加rowspan属性

$(this).attr("rowspan", mark);

});

tdCurArr.each(function () {//当前行隐藏

$(this).css("display", "none");

});

}else {

mergeIndex = i;

mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值