<html>
<head>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">
<title>合并表格</title>
<script>
//功能:合并表格
//参数:tb-需要合并的表格ID
//参数:colLength--需要对前几列进行合并,比如,
//想合并前两列,后面的数据列忽略合并,colLength应为2
//缺省表示对全部列合并
//data:2011.11.06
///////////////////////////////////////////////
function uniteTable(tb,colLength){
//检查表格是否规整
if(!checkTable(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
//为每个单元格命名
for(i=0i<rowCounti++){
for(j=0j<colCountj++){
tb.rows[i].cells[j].id="tb__" + i.toString() + "_" + j.toString()
}
}
//逐列检查合并
for(i=0i<colCounti++){
if(i==colLength) return
obj1=document.getElementById("tb__0_"+i.toString())
for(j=1j<rowCountj++){
obj2=document.getElementById("tb__"+j.toString()+"_"+i.toString())
if(obj1.innerText==obj2.innerText){
obj1.rowSpan++
obj2.parentNode.removeChild(obj2)
}else{
obj1=document.getElementById("tb__"+j.toString()+"_"+i.toString())
}
}
}
}
//功能:检查表格是否规整
//参数:tb--需要检查的表格ID
//data: 2011.11.06
function checkTable(tb){
if(tb.rows.length==0) return false
if(tb.rows[0].cells.length==0) return false
for(var i=0i<tb.rows.lengthi++){
if(tb.rows[0].cells.length!=tb.rows[i].cells.length) return false
}
return true
}
</script>
</head>
<body>
<table width="400" border="1" id="table1">
<tr>
<td>a</td>
<td>for</td>
<td>100</td>
<td>200</td>
<td>1</td>
</tr>
<tr>
<td>a</td>
<td>for</td>
<td>100</td>
<td>300</td>
<td>2</td>
</tr>
<tr>
<td>a</td>
<td>if</td>
<td>100</td>
<td>200</td>
<td>3</td>
</tr>
<tr>
<td>a</td>
<td>if</td>
<td>300</td>
<td>230</td>
<td>4</td>
</tr>
<tr>
<td>a</td>
<td>if</td>
<td>320</td>
<td>230</td>
<td>5</td>
</tr>
</table>
<br><input type="button" value="合并表格" onClick="uniteTable(table1,4)">
</body>
</html>
获取值的方式是对的用个固定的位置示例:
if (tb.rows[0].cells[0].innerHTML == tb.rows[1].cells[0].innerHTML) {
//伪代码
tb.rows[1].deleteCell(0)
tb.rows[0].cells[0].rowspan =2
}
var c = a.concat(b),//合并成一个数组temp = {},//用于id判断重复
result = []//最后的新数组
//遍历c数组,将每个item.id在temp中是否存在值做判断,如不存在则对应的item赋值给新数组,并将temp中item.id对应的key赋值,下次对相同值做判断时便不会走此分支,达到判断重复值的目的;
c.map((item,index)=>{
if(!temp[item.id]){
result.push(item)
temp[item.id] = true
}
})
console.log(result)