js动态的合并table的单元格

<!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">   
   <tbody>  
    <tr>   
     <th>c1</th>   
     <th>c2</th>   
     <th>c3</th>   
     <th>c4</th>   
     <th>c5</th>   
     <th>c6</th>   
    </tr>   
    <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>3</td>   
     <td>4</td>   
     <td>5</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>a</td>   
     <td>2</td>   
     <td>4</td>   
     <td>5</td>   
     <td>6</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>   
   </tbody>  
  </table>  
  <br /> 合并后:  
  <br />   
  <table width="400" border="1" id="table1">   
   <tbody>  
    <tr>   
     <th>c1</th>   
     <th>c2</th>   
     <th>c3</th>   
     <th>c4</th>   
     <th>c5</th>   
     <th>c6</th>   
    </tr>   
    <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>3</td>   
     <td>4</td>   
     <td>5</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>a</td>   
     <td>2</td>   
     <td>4</td>   
     <td>5</td>   
     <td>6</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>   
   </tbody>  
  </table>     
  <script type="text/javascript">   
    //多级次动态合并表格行  
    function checkArray(arr1,arr2){  
        for (var i = 0; i < arr1.length; i++) {  
            if (arr1[i].innerText===arr2[i].innerText) {  

             }else{  
                      return false;  
            }  
        }  
         return true;  
    }  
    function dynamicMergeTableRow(tableId){  
          var tb = document.getElementById(tableId);  
          var obj1;  
          var obj2;  
          var objtemp1 = [];  
          var objtemp2 = [];  
          var rowCount = tb.rows.length;  
          console.info(rowCount);  
          var colCount = tb.rows[0].cells.length;  
          console.info(rowCount);  
          var colLength = 4;  

          //命名(表头除外)  
          for (var i = 1; i < rowCount; i++) {  
            for (var j = 0; j < colCount; j++) {  
              tb.rows[i].cells[j].id = "tb_" + i.toString() + "_" + j.toString();  
            }  
          }  

          //从后往前检查,进行逐列检查合并,开始列为colLength-1  
          for (var col = colLength -1; col >= 0; col--) {  
             //当col>0时有前方的单元格   
             if (col > 0) {  
                //objtemp1为obj1左侧所有单元格集合,初始objtemp1及obj1均从第二行开始(tb_1_)  
                for (var l = 0; l < col; l++) {  
                   objtemp1[l] = document.getElementById("tb_1_" + l.toString());  
                }  
             }  
             obj1 = document.getElementById("tb_1_" + col.toString());  

             //obj2为obj1下方单元格,obj1从第二行开始,则obj2从第三行开始,遍历以row=2为起始值  
             for (var row = 2; row < rowCount; row++) {  
                    //同obj1及objtemp1,col>0:即有前方单元格,此时有objtemp2  
                    if (col > 0) {  
                        for (var l = 0; l < col; l++) {  
                           objtemp2[l] = document.getElementById("tb_" + row.toString() +"_"+ l.toString());  
                        }  
                    }  
                    obj2 = document.getElementById("tb_" + row.toString() +"_"+ col.toString());  

                    //定义完obj1/obj2/objtemp1/objtemp2后,开始合并  
                    //第一层判断:当obj1的值等于obj2时,即同一列的相邻单元格值相同  
                    if (obj1.innerText == obj2.innerText) {  
                        //第二层判断:obj1/obj2所在列前方还有其他列:即col>0(此步判断为单元格合并的依赖性提供支持)  
                        if (col > 0) {  
                            //第三层判断:obj1/obj2所在列前方还有其他列,且objtemp1,objtemp2值完全相同,可以合并  
                            if (checkArray(objtemp1,objtemp2)) {  
                                obj1.rowSpan++;  
                                obj2.parentNode.removeChild(obj2);  
                            }  
                            //第三层判断:obj1/obj2所在列前方还有其他列,且objtemp1,objtemp2值不同,不可合并,并重新对obj1/objtemp1赋值,令其等于原来的obj2/objtemp2            
                            else{  
                                obj1 = document.getElementById("tb_" + row.toString() +"_"+ col.toString());  
                                for (var l = 0; l < col; l++) {  
                                    objtemp1[l] = document.getElementById("tb_" + row.toString() +"_"+ l.toString());  
                                }                    
                            }  
                        }  
                        //第二层判断:obj1/obj2所在列为首列,直接合并  
                        else{  
                            obj1.rowSpan++;  
                            obj2.parentNode.removeChild(obj2);  
                        }  
                    }  
                    //第一层判断:当obj1的值不等于obj2时,即同一列的相邻单元格值不相,此时重新对obj1/objtemp1赋值,令其等于原来的obj2/objtemp2  
                    else{  
                        obj1 = document.getElementById("tb_" + row.toString() +"_"+ col.toString());  
                        for (var l = 0; l < col; l++) {  
                            objtemp1[l] = document.getElementById("tb_" + row.toString() +"_"+ l.toString());  
                        }         
                    }  
             }  
             objtemp1 = [];  
             objtemp2 = [];  
          }  
    }  
    dynamicMergeTableRow('table1');  
 </script>   
 </body>  
</html>  

原文章:
http://blog.csdn.net/galeno1994/article/details/73800955

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值