Javascript合并表格相同内容单元格示例

效果图:

HTML代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>表格相同内容合并</title>
</head>
 
<body>
合并前:
<table width="400" border="1">
  <tr>
    <td>a</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
  </tr>
  <tr>
    <td>a</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>6</td>
  </tr>
  <tr>
    <td>a</td>
    <td>2</td>
    <td>3</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
  <tr>
    <td>b</td>
    <td>3</td>
    <td>4</td>
    <td>6</td>
    <td>7</td>
    <td> </td>
  </tr>
  <tr>
    <td>b</td>
    <td>3</td>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td> </td>
  </tr>
  <tr>
    <td>cc</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
    <td> </td>
  </tr>
  <tr>
    <td>cc</td>
    <td>2</td>
    <td>3</td>
    <td>5</td>
    <td>5</td>
    <td> </td>
  </tr>
  <tr>
    <td>d</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
  <tr>
    <td>e</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
</table><br />
合并后:<br />
<table width="400" border="1" id="table1">
  <tr>
    <td>a</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
  </tr>
  <tr>
    <td>a</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>6</td>
  </tr>
  <tr>
    <td>a</td>
    <td>2</td>
    <td>3</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
  <tr>
    <td>b</td>
    <td>3</td>
    <td>4</td>
    <td>6</td>
    <td>7</td>
    <td> </td>
  </tr>
  <tr>
    <td>b</td>
    <td>3</td>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td> </td>
  </tr>
  <tr>
    <td>cc</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
    <td> </td>
  </tr>
  <tr>
    <td>cc</td>
    <td>2</td>
    <td>3</td>
    <td>5</td>
    <td>5</td>
    <td> </td>
  </tr>
  <tr>
    <td>d</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
  <tr>
    <td>e</td>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td> </td>
  </tr>
</table>
</body>
</html>


 

JS:

///合并表格相同行的内容
///table:表格或者表格ID(最好是tbody,避免把表尾给合并了)
///startRow:起始行,没有标题就从0开始
///endRow:终止行,此参数是递归时检查的范围,一开始时会自动赋值为最后一行
///col:当前处理的列
///endCol:终止列
///isInit:是否初始调用,如果是则在终止行为0时自动取最后一行
function MergeCell(table, startRow, endRow, col, endCol, isInit) {
    if (typeof (table) == 'string')
        table = document.getElementById(table);
    if (col >= table.rows[0].cells.length || col > endCol) {
        return;
    }
    if (isInit == undefined) isInit = true;
    //当检查第0列时检查所有行
    if ((col == 0 || endRow == 0) && isInit) {
        endRow = table.rows.length - 1;
    }
    for (var i = startRow; i < endRow; i++) {
        //程序是自左向右合并
        if (table.rows[startRow].cells[col].innerHTML == table.rows[i + 1].cells[col].innerHTML) {
            //如果相同则隐藏下一行的同列单元格
            table.rows[i + 1].cells[col].style.display = 'none';
            //更新rowSpan属性
            table.rows[startRow].cells[col].rowSpan = (table.rows[startRow].cells[col].rowSpan | 0) + 1;
            //当循环到终止行前一行并且起始行和终止行不相同时递归(因为上面的代码已经检查了i+1行,所以此处只到endRow-1)
            if (i == endRow - 1 && startRow != endRow) {
                MergeCell(table, startRow, endRow, col + 1, endCol, false);
            }
        } else {
            //起始行,终止行不变,检查下一列
            MergeCell(table, startRow, i, col + 1, endCol, false);
            //增加起始行
            startRow = i + 1;
        }
    }
}

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值