table合并相同单元格的问题 谁能解决,感激不尽,都来看看啊

f8932809 2015-01-23 02:44:23
<script type="text/javascript"> 
function mc(tableId, startRow, endRow, col) {
var tb = document.getElementById(tableId);
if (col >= tb.rows[2].cells.length)
{
return;
}
if (col == 0)
{
endRow = tb.rows.length-1;
}
for (var i = startRow; i < endRow; i++)
{
if (tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[0].innerHTML)
{
tb.rows[i + 1].removeChild(tb.rows[i + 1].cells[0]);
tb.rows[startRow].cells[col].rowSpan = (tb.rows[startRow].cells[col].rowSpan | 0) + 1;

if (i == endRow - 1 && startRow != endRow)
{
mc(tableId, startRow, endRow, col + 1);
}
}
else {
mc(tableId, startRow, i + 0, col + 1);
startRow = i + 1;
}
}
}
</script>

HTML代码
<table width="400" border="1" id="table2"> 
<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>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>

调用:mc("table2",0,0,0)

合并前:

合并后

发现问题是: if (tb.rows[startRow].cells[col].innerHTML == tb.rows[i + 1].cells[0].innerHTML)
这句在递归回调时,判断列出现了问题,但我现在有些搞不懂,为什么要用 tb.rows[i + 1].cells[0].innerHTML 判断
而不是 tb.rows[i + 1].cells[col].innerHTML 为什么cells[0]始终为0 ?
...全文
416 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
f8932809 2015-01-23
  • 打赏
  • 举报
回复
引用 1 楼 apollokk 的回复:
因为前面的列已经合并掉了,不见了,所以每次只找0开始的列就好了
确实是,你真是帮了我的大忙了 ,太谢谢你了
Hello World, 2015-01-23
  • 打赏
  • 举报
回复

<script type="text/javascript">
	function mc(tableId, startRow, endRow, col) {
		var tb = document.getElementById(tableId);
		if (col >= tb.rows[0].cells.length-0) {
			return;
		}
		if (col == 0) {
			endRow = tb.rows.length - 1;
		}
		for (var i = startRow; i < endRow; i++){
			var subCol = tb.rows[0].cells.length - tb.rows[startRow].cells.length;
			if (tb.rows[startRow].cells[col-subCol].innerHTML == tb.rows[i + 1].cells[0].innerHTML) {
				tb.rows[i + 1].removeChild(tb.rows[i + 1].cells[0]);
				tb.rows[startRow].cells[col-subCol].rowSpan = (tb.rows[startRow].cells[col-subCol].rowSpan | 0) + 1;
				if (i == endRow - 1 && startRow != endRow) {
					mc(tableId, startRow, endRow, col + 1);
				}
			} else {
				mc(tableId, startRow, i + 0, col + 1);
				startRow = i + 1;
			}
		}
	}
	mc('table1', 0, 0, 0); 
</script>
Hello World, 2015-01-23
  • 打赏
  • 举报
回复
因为前面的列已经合并掉了,不见了,所以每次只找0开始的列就好了

87,984

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧