注意:此种方式不适用于表头有合并的表格或者Gridview
<script> function unionTab(tb, colLength) { // 检查表格是否规整 if (!checkTab(tb)) return; var i = 0; var j = 0; var rowCount = tb.rows.length; // 行数 var colCount = tb.rows[0].cells.length; // 列数 var obj1 = null; var obj2 = null; var objtemp1=new Array(); var objtemp2=new Array(); //为每个单元格命名,表头不命名 for (i = 1; i < rowCount; i++) { for (j = 0; j < colCount; j++) { tb.rows[i].cells[j].id = "tb_" + i.toString() + "_" + j.toString(); } } var k=colLength-1; //从后往前检查,进行逐列检查合并,开始列为colLength-1 for (i = k; i >= 0; i--) { //当i>0时有前方的单元格 if (i > 0) { //查找当前单元格前几单元格,l为列值 if(objtemp1.length>0) { objtemp1=new Array(); } for(l=0;l<i;l++) { objtemp1[l]=document.getElementById("tb_1_" + l.toString()); } } obj1 = document.getElementById("tb_1_" + i.toString()); for (j = 2; j < rowCount; j++) { if (i > 0) { //查找当前单元格前几单元格,l为列值 if(objtemp2.length>0) { objtemp2=new Array(); } for(l=0;l<i;l++) { objtemp2[l]=document.getElementById("tb_" + j.toString() + "_" + l.toString()); } } obj2 = document.getElementById("tb_" + j.toString() + "_"+ i.toString()); if (obj1.innerText == obj2.innerText) { if (i > 0) { if (checkArray(objtemp1,objtemp2)) { obj1.rowSpan++; obj2.parentNode.removeChild(obj2); } else { obj1 = document.getElementById("tb_" + j.toString() + "_" + i.toString()); if(objtemp1.length>0) { objtemp1=new Array(); } for(l=0;l<i;l++) { objtemp1[l]=document.getElementById("tb_" + j.toString() + "_" + l.toString()); } } } else { obj1.rowSpan++; obj2.parentNode.removeChild(obj2); } } else { obj1 = document.getElementById("tb_" + j.toString() + "_" + i.toString()); if(objtemp1.length>0) { objtemp1=new Array(); } for(l=0;l<i;l++) { objtemp1[l]=document.getElementById("tb_" + j.toString() + "_" + l.toString()); } } } } } ///////////////////////////////////////// // 功能:检查表格是否规整 // 参数:tb--需要检查的表格ID // /////////////////////////////////////// function checkTab(tb) { if (tb.rows.length == 0) return false; //如果只有一行表头也返回false if(tb.rows.length==1)
return false; if (tb.rows[0].cells.length == 0) return false; for ( var i = 0; i < tb.rows.length; i++) { if (tb.rows[0].cells.length != tb.rows[i].cells.length) return false; } return true; } //检查取出的值是否相等 function checkArray(arr1,arr2){ for(i=0;i<arr1.length;i++){ if(arr1[i].innerText==arr2[i].innerText){ }else{ return false; } } return true; } </script>
调用方式如下:<body onLoad=”unionTab(table1,3)”> 其中table1为表格或GridView的ID
实例文件下载地址