读书人

急求一js解决方案

发布时间: 2012-03-05 11:54:01 作者: rapoo

急求一js
急求一个js函数能够在规定的行列区域中,将数据相同的单元格合并,如将下列表格中的数据相同部分合并,主要是已带合并的部分该如何处理
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<title> 合并表格 </title>
</head>

<body>
<table width= "400 " border= "1 " id= "table1 ">
<tr>
<td> 年度预算 </td>
<td colspan= "5 "> 分季预算 </td>
</tr>
<tr>
<td> 年度预算 </td>
<td colspan= "3 "> 第一季度 </td>
<td> 第二季度 </td>
<td> 第三季度 </td>
</tr>
<tr>
<td> 年度预算 </td>
<td> 1 </td>
<td> 2 </td>
<td> 3 </td>
<td> 第二季度 </td>
<td> 第三季度 </td>
</tr>
</table>
<br>
<input type= "button " value= "合并表格 " onClick= "marage() ">
</body>
</html>


[解决办法]
这个是合并行的,合并列的比较麻烦点,需要将table映射成一个二维数组,转置后再根据下面处理行的方法处理列合并,处理完后再转置,最后再映射成table(个人愚见,希望有高手能有简单方法)
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<title> 合并表格 </title>
<script>
function marage(){
var trObjs=document.getElementsByTagName( "tr ");
var tr_len=trObjs.length;


for(var i=tr_len-1;i> =0;i--){
var tdObjs=trObjs[i].childNodes;
var td_len=tdObjs.length;
var col_size=0;
for(var j=td_len-1;j> =0;j--){
if(j> 0){
var td_value=tdObjs[j].innerText;
var next_col_value=tdObjs[j-1].innerText;
if(td_value==next_col_value){
tdObjs[j-1].colSpan=tdObjs[j].colSpan+tdObjs[j-1].colSpan;
tdObjs[j].removeNode();

}else{
col_size+=tdObjs[j].colSpan;
}
}
}
}
}
</script>
</head>

<body>
<table width= "400 " border= "1 " id= "table1 ">
<tr>
<td> 年度预算 </td>
<td colspan= "5 "> 年度预算 </td>
</tr>
<tr>
<td> 年度预算 </td>
<td colspan= "3 "> 第三季度 </td>
<td> 第三季度 </td>
<td> 第三季度 </td>
</tr>
<tr>
<td> 年度预算 </td>
<td> 1 </td>
<td> 2 </td>
<td> 3 </td>
<td> 第二季度 </td>
<td> 第三季度 </td>
</tr>
</table>
<br>
<input type= "button " value= "合并表格 " onClick= "marage() ">
</body>
</html>

读书人网 >JavaScript

热点推荐