您的位置:首页 > Web前端 > JavaScript

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

2017-09-26 09:29 357 查看
记录下,按照自己的思维流程写的代码,难免有冗余和不合理的地方,着急要用,也懒得优化,适用于有合并前两列中相同内容单元格需求的地方。如有有人能受到启发写出更加好用完美的代码,那我会感到非常高兴。另外发现网上已经有人写了不少这方面的例子,但是都有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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息