layui table表格单元格动态合并,并设置隔行变色,此代码只针对嵌套数组只有一层的时候有效,多个数组嵌套还在冥想当中!!

需求描述

我们知道在layui插件官方平台有个可以无限极单元格合并的模块,但是其核心理念是针对多个相同数据进行合并,并且也非常好用,数据结构不存在嵌套结构。

但是偶尔数据也有嵌套的时候,哪怕只有一层数据结构嵌套的话,上面的方法就不好使了,并且我们在不抛弃layui.table的时候照样可以使单元格进行合并,那就请看下图:

整个代码如下:

layui.define (function (exports) {
var $ = layui.jquery,
mod = {
render: function (myTable) {
var tableBox = $ (myTable.elem).next ().children ('.layui-table-box'),
$main = tableBox
.children ('.layui-table-body')
.children ('table')
.children ('tbody')
.children ('*[data-index]');
$main.each (function (pindex) {
var td = $ (this).children ();
td.each (function (index) {
var pp = $ (this).find ('p');
pp.parents ('td').addClass ('abc');
if (!pp.parents ('td').siblings ().hasClass ('abc')) {
pp.parents ('td').siblings ().attr ('rowspan', pp.length);
} else {
pp.parents ('td').removeAttr ('rowspan');
}
}); if ($ (this).find ('td').hasClass ('abc')) {
var hasAbc = $ (this).find ('.abc'), arr = [], len = 0;
hasAbc.each (function (im) {
var iem = $ (this).find ('p');
len = iem.length;
iem.each (function (ia, item) {
arr.push (item);
});
$ (this).find ('P:gt(0)').remove ();
});
var dataArr = spFn (arr, len); //生成tr
dataArr.reverse ().forEach (function (item, index) {
if (index != dataArr.length - 1) {
var str = '<tr flag=' + pindex + '>';
for (var i = 0; i < item.length; i++) {
str += "<td align='center'>";
str += "<div class='layui-table-cell'>";
str += $ (item[i]).html ();
str += '</div>';
str += '</td>';
}
str += '</tr>'; if (td.find ('p').parents ('tr').length > 0) {
td.find ('p').parents ('tr').next ().before (str);
}
}
});
}
});
var $allmain = tableBox
.children ('.layui-table-body')
.children ('table')
.children ('tbody')
.children ('tr');
var findTrBs = function (flag) {
var className;
$allmain.each (function () {
if ($ (this).attr ('data-index') == flag) {
className = $ (this).attr ('class');
}
});
return className;
};
//单元格合并以后 设置隔行变色
$allmain.each (function (i) {
if ($ (this).attr ('data-index')) {
if ($ (this).attr ('data-index') % 2 == 0) {
$ (this).addClass ('even');
} else {
$ (this).addClass ('odd');
}
} else {
$ (this).addClass (findTrBs ($ (this).attr ('flag')));
}
});
},
}; exports ('tableMerge', mod);
});

具体思路:

1、首先我们需要先把table表格数据字段设置成template

2、在页面上设置模板
<script type="text/html" id="nownr">
{{# layui.each(d.corrNowConArr,function(index,item){ }}
<p>{{item.con}}</p>
{{# });}}
</script>
3、通过特殊元素标记将此数据追加到对应tr的下面,此过程我们需要做一些转换
//将数组分割成 几个几个组合的多维数组
//[1,2,3,4] 组合成[[1,2],[3,4]]
function spFn (arr, len) {
const arr1 = arr.reduce ((init, item, index) => {
index % len === 0
? init.push ([item])
: init[init.length - 1].push (item);
return init;
}, []);
return senFun (arr1);
}

4、将遍历好的元素标记按照 纵向排列

//数组竖向排列
//[[1,2],[3,4]] 组合成[[1,3],[2,4]]
function senFun (data) {
let final = [];
let length = Math.min (...data.map (arr => arr.length));
for (let i = 0; i < length; i++) {
let tmp = [];
for (let j = 0; j < data.length; j++) {
tmp.push (data[j][i]);
}
final.push (tmp);
}
return final;
}

最终渲染结构如图:

切记:此案例不支持多项嵌套 !写的不好还请见谅。如有问题可以留言

下面奉上支持多层单元格合并的链接:https://fly.layui.com/extend/tableMerge/



layui table表格单元格动态合并,并设置隔行变色的更多相关文章

  1. jQuery实现HTML表格单元格的合并功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. easyUI datagarid单元格动态合并

    第二列根据第一列合并,第三列根据第二列合并.层级关系. /* * tableID表格的id * colList要合并的字段例如:"overcount,totalcount" */ ...

  3. freemarker实现单元格动态合并-行合并

    项目需求:项目中有个需求,需要将一些数据库中的数据根据需求导出,生成一个word,研究了一些技术,其中包括POI.freemaker,对比了一下实现过程及技术难度没最终使用了freemaker; 原始 ...

  4. jsp table 表格单元格编辑示例

    列表单元格: //两个 隐藏的 input, 第一个存 记录 id, 单元格内容是排序码 : <td id="ordinal"><%=ordinal%> & ...

  5. layui更新表格单元格数据口,更新单元格的内容

    //监听工具条 table.on('tool(edit)', function(obj){ var data = obj.data; if(obj.event === 'getinvitation') ...

  6. html如何设置表格单元格内容垂直居中?

    父元素设置为表格的单元格元素td,而在表格单元格中的元素设置vertical-align: middle; 对父容器(td)使用:display: table-cell 其内子元素使用:vertica ...

  7. NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT

    NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...

  8. 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。

    前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...

  9. 如何让elemengUI中的表格组件相同内容的单元格自动合并

    1. 前言 这两天在工作中遇到这样一个需求:将某个Excel中的数据在页面上以表格形式展示出来,并且尽量保持数据层级与Excel中一致.在原始Excel文件中,对每一行相同的数据都进行了合并,使得数据 ...

  10. JavaScript动态改变表格单元格内容的方法

    本文实例讲述了JavaScript动态改变表格单元格内容的方法.分享给大家供大家参考.具体如下: JavaScript动态改变表格单元格的内容,下面的代码通过修改单元格的innerHTML来修改单元格 ...

随机推荐

  1. 开源 - Ideal库 - 特殊时间扩展方法(三)

    书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代码如下: ...

  2. 8.Jenkins+Docker+SpringCloud微服务持续集成

    前言 通过前几章的学习,了解了持续集成概念以及相关技术的学习和使用 接下来学习构建一整套SpringCloud微服务+Docker+Jenkins的持续集成案例 环境 架构图 流程说明: 开发人员将代 ...

  3. 2023NOIP A层联测28 T4 小猫吃火龙果

    2023NOIP A层联测28 T4 小猫吃火龙果 分块题,跟赛时的一个倍增部分分做法很像. 思路 如果没有动态操作,可以设 \(dp[i][T][k]\) 为:在 \(i\) 时为 \(T(T\in ...

  4. 我们有40%代码是 AI 写的

  5. JAXP(Java API for XML Parsing)

    JAXP(Java API for XML Parsing)    过去几年中,XML分折已经被标准为两个不同的处理模型:SAX(Simple API for XML)以及DOM(Document O ...

  6. Goland破解之无限重置(最新)

    分享一下 JetBrains 全家桶 IDEA 2021.x 的激活破解教程,相当于永久激活 破解了,亲测有效,下面是详细文档哦~ JetBrains 全家桶 IDEA 2021.x 破解激活教程,相 ...

  7. 六步取消win11开机PIN密码登录

    0.前言 新买的电脑打开后首先要进行一系列的操作激活操作系统.在这些操作中最令人讨厌的是设置开机密码(pin). 也许有很多人的电脑需要保密,限制别人登录,这时使用登录pin是很有必要的.而还有很多人 ...

  8. Kettle设置定时跑任务

    1.Kettle设置作业 保存,test.kjb 2. 创建批处理 zxjb.bat C: cd C:\kettle\pdi-ce-9.4.0.0-343\data-integration kitch ...

  9. 鼠标事件:mouseout、mouseover事件会不断触发

    mouseover 和 mouseenter mouseenter不会冒泡,而mouseover会冒泡 mouseover:指针进入事件监听的元素内 或者 其他的子元素内 都会触发mouseover ...

  10. DBeaver 不错大家都来用 DBeaver 吧

    支持 windows linux 支持 pg 等 n 多数据库