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


    前言

    使用js方法对html中的table表格进行单元格的行列合并操作。

    网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用。

    所以在网上各位大神写的方法的基础上进行了部分修改以适合自己业务中的使用。

    js方法

    function MergeTableCell(tableId, startRow, endRow, col) {
        var tb = document.getElementById(tableId);
        //设置为0时,检索所有行
        if (endRow == 0) {
            endRow = tb.rows.length - 1;
        }
        //指定数据行索引大于表格行数
        if (endRow >= tb.rows.length) {
            return;
        }
        //检测指定的列索引是否超出表格列数
        if (col >= tb.rows[0].cells.length) {
            return;
        }
        //循环需要判断的数据行
        for (var i = startRow; i < endRow; i++) {
            //如果当前行与下一行数据值相同,则进行前面列的判断
            if (tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[col].innerHTML) {
                var Same = true;
                //循环跟前面的所有的同级数据行进行判断
                for (var j = col; j > 0; j--) {
                    if (tb.rows[startRow].cells[j - 1].innerHTML != tb.rows[i + 1].cells[j - 1].innerHTML) {
                        Same = false;
                        break;
                    }
                }
                //如果前面的同级数据行的值均相同,则进行单元格的合并
                if (true == Same) {
                    //如果相同则删除下一行的第0列单元格  
                    tb.rows[i + 1].cells[col].style.display = 'none';
                    //更新rowSpan属性  
                    tb.rows[startRow].cells[col].rowSpan = (tb.rows[startRow].cells[col].rowSpan | 0) + 1;
                }
                else {
                    //增加起始行  
                    startRow = i + 1;
                }
            }
            else {
                //增加起始行  
                startRow = i + 1;
            }
        }
    }

    说明

    1、Function:合并表格相同行的内容
    2、Parameter:
    tableId:表格id,
    startRow:起始行(索引0开始)如果有标题行则填写1
    endRow:终止行(索引值)如果填写0则自动赋值
    col:需要处理的列(索引值)
    3、Example
    MergeTableCell("table_test", 2, 0, 1);
    Para1:table_test,table表格的id
    Para2:2,开始行的索引值
    Para3:0,结束行的索引值
    Para4:1,需要处理的列的索引值
    4、Worning
    (1)合并一列,正常调用
    示例:MergeTableCell("table_test", 2, 0, 0);
    (2)合并多列,需要将待处理的列从大到小排列
    示例:合并第一列和第二列
    MergeTableCell("table_test", 2, 0, 1);
    MergeTableCell("table_test", 2, 0, 0);
    原因:
    合并第二列时,需要判断第一列的值是否相同,
    如果第一列的值不相同,则不进行合并。
    table   col1    col2
    row1    安徽    省
    row2    浙江    省
    如上,虽然第二列的值都为"省",
    但是第一列的值不相同,所以不进行单元格的合并。
    原理:
    合并时会当前列的两行数据与前面列的同级两行是否一致,
    如果一致才会进行合并。
    如果先进行合并第一列的值,
    后面合并时判断前面的列值是否一致时,所获取到的前面列的值就是空,
    也就无法正常的判断的值是否一致了。

  • 相关阅读:
    华为云招募工业智能领域合作伙伴,强力扶持+商业变现
    “不敢去怀疑代码,又不得不怀疑代码”记一次网络请求超时分析
    详解openGauss多线程架构启动过程
    站在数字化风口,工装企业如何“飞起来”
    如何化解35岁危机?华为云数据库首席架构师20年技术经验分享
    解读2022年度敏捷教练行业现状报告
    理论+案例,带你掌握Angular依赖注入模式的应用
    机器学习实践:基于支持向量机算法对鸢尾花进行分类
    8种桌面IDE CodeArts智能代码补全类型
    【CVPR2022】用于域适应语义分割的域无关先验
  • 原文地址:https://www.cnblogs.com/masonblog/p/8615106.html
Copyright © 2020-2023  润新知