javascript根据单元格内容动态合并相同内容单元格

记录下,按照自己的思维流程写的代码,难免有冗余和不合理的地方,着急要用,也懒得优化,适用于有合并前两列中相同内容单元格需求的地方。如有有人能受到启发写出更加好用完美的代码,那我会感到非常高兴。另外发现网上已经有人写了不少这方面的例子,但是都有BUG,我这段代码也欢迎大家测试,有什么不足欢迎评论。

	function HB(tableId) {

		var tab = document.getElementById(tableId);
		var tabRows = tab.rows.length;//取得表格的行数
		var startRow = 0;//第一列种子索引
		var rowNum = 0;//第一列合并的行数操作数
		var addNum=1;//第二列合并行数操作数,第二列合并的行数不会超过第一列合并的行数
		var startRow2 = 0;//第二列种子索引
		var cell=0;//第二列合并操作种子标记,当第一个合并的单元格完成监测后,将种子置为-1
		for (var i = 0; i < tabRows; i++) {//合并第一列相同单元格
			if (i == 0) {
				startRow = i;
				rowNum++;
				continue;
			}
			if (tab.rows[startRow].cells[0].innerHTML == tab.rows[i].cells[0].innerHTML) {
				tab.rows[i].removeChild(tab.rows[i].cells[0]);
				rowNum++;
				if(startRow==(i+1-rowNum)){
					tab.rows[startRow].cells[0].rowSpan = rowNum;
				}
				continue;
			}
				//新合并第二列
				addNum=1;
				cell=0;
				for(var n=0;n<rowNum;n++){
					if(n==0){
						startRow2=startRow;//首次进入,第一行的第二列作为种子
						continue;
					}
					//alert("tab.rows["+startRow2+"].cells["+(cell+1)+"].innerHTML"+tab.rows[startRow2].cells[cell+1].innerHTML);
					//alert("tab.rows["+(startRow2+addNum)+"].cells[0].innerHTML"+tab.rows[startRow2+addNum].cells[0].innerHTML);
					if(tab.rows[startRow2].cells[cell+1].innerHTML==tab.rows[startRow2+addNum].cells[0].innerHTML){
						if(n==rowNum-1){
							//alert("最后一次循环发现合并");
							tab.rows[startRow2+addNum].removeChild(tab.rows[startRow2+addNum].cells[0]);
							addNum++;
							tab.rows[startRow2].cells[cell+1].rowSpan=addNum;
							break;
						}
						tab.rows[startRow2+addNum].removeChild(tab.rows[startRow2+addNum].cells[0]);
						addNum++; 
						//alert("addNum:"+addNum);
						continue;
					}
					//alert("出来了!!!"+n);
					if(addNum==1){
						//alert("下方没有找到相同的合并项,作为种子继续寻找");
					}
					tab.rows[startRow2].cells[cell+1].rowSpan=addNum;
					//设置新种子索引
					startRow2=startRow2+addNum;
					cell=-1;
					addNum=1;
				}  
			tab.rows[startRow].cells[0].rowSpan = rowNum;
			startRow = i;
			rowNum = 1;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值