EXtjs 合并单元格

/** 
         * wujian 
         * 合并单元格() 
         * @param {} grid  要合并单元格的grid对象 
         * @param {} main_col  主参考合并列 
         * @param {} ref_cols  副参考合并列:为一个数组(如:[2,4,5])
         */  
        mergeCells : function(grid,main_col,ref_cols){ 
            var arrayTr=document.getElementById(grid.getId()+"-body").firstChild.firstChild.getElementsByTagName('tr'); 
            var trCount = arrayTr.length;  
            var arrayTd;  
            var nullDivText = '<div class="FF0000 border:0px;"></div>';
            var nullBotton = 'border-bottom: #ededed 0px solid;';
            var nullTop = 'border-top:#ededed 0px solid;';
            var nullTopBotton = 'border-top:#ededed 0px solid;border-bottom: #ededed 0px solid;';
            var mergeObjects = [];
            var merge = function(rowspanObj,isMerge){ //定义合并函数 
                if(rowspanObj.rowspan>1){
                if(isMerge) mergeObjects.push(rowspanObj);
                 Ext.each(rowspanObj,function(obj){
                 for(var i=0;i<obj.rowspan;i++){
                 if((obj.tr+i)<trCount){
                 if(i==0){//设置首行
                 var firstTd = arrayTr[obj.tr].getElementsByTagName("td");
                             firstTd[obj.td-1].style.cssText=nullBotton;
                             if(obj.rowspan>2)
                             firstTd[obj.td-1].innerHTML = nullDivText;
                 }else if(i==(Math.round(obj.rowspan/2-1))){//设置居中
                     var firstTd = arrayTr[obj.tr+i].getElementsByTagName("td");
                             firstTd[obj.td-1].style.cssText=nullTopBotton;
                     }else if(i==(obj.rowspan-1)){//设置最后一行
                     var lastTd = arrayTr[obj.tr+i].getElementsByTagName("td");
                     lastTd[obj.td-1].innerHTML = nullDivText;
                     lastTd[obj.td-1].style.cssText=nullTop;
                     }else{ 
                 arrayTd = arrayTr[obj.tr+i].getElementsByTagName("td");
                 arrayTd[obj.td-1].innerHTML = nullDivText;
                 arrayTd[obj.td-1].style.cssText=nullTopBotton;
                 }
                 }
                 }
                }); 
                }else{
                var firstTd = arrayTr[rowspanObj.tr].getElementsByTagName("td");
               firstTd[rowspanObj.td-1].style.cssText=nullDivText;
                }     
            }; 
            
            var spanRows = function(strTr,cols,trCount,isMerge){
            var rowspanObj = {}; //要进行跨列操作的td对象{tr:1,td:2,rowspan:5}      
            var col;  
            Ext.each(cols,function(colIndex){ //逐列去操作tr  
                var rowspan = 1;  
                var divHtml = null;//单元格内的数值          
                for(var i=strTr;i<trCount;i++){  //i=0表示表头等没用的行  
                    arrayTd = arrayTr[i].getElementsByTagName("td");  
                    for(var j=1;j<arrayTd.length;j++){
                    arrayTd[j].style.css='x-grid-cell';
                    }
                    var cold=0;  
                    col=colIndex+cold;//跳过RowNumber列和check列  
                    if(!divHtml){  
                        divHtml = arrayTd[col-1].innerHTML;  
                        rowspanObj = {tr:i,td:col,rowspan:rowspan};  
                    }else{  
                        var cellText = arrayTd[col-1].innerHTML;  
                        var addf=function(){   
                            rowspanObj["rowspan"] = rowspanObj["rowspan"]+1;  //合并一行
                            if(i==trCount-1){  
                                merge(rowspanObj,isMerge);//执行合并函数 
                            }
                        };  
                        var mergef=function(){  
                            merge(rowspanObj,isMerge);//执行合并函数  
                            divHtml = cellText;  
                            rowspanObj = {tr:i,td:col,rowspan:rowspan};
                        }; 
                        if(cellText == divHtml){addf();}else{mergef();}
                    }  
                }  
            });
            };
            //合并第一列
            spanRows(0,main_col,trCount,true);
            //合并相邻列
            if(ref_cols)
            mergeObjects.forEach(function(rowspanObj){
            spanRows(rowspanObj['tr'],ref_cols,rowspanObj['tr']+rowspanObj['rowspan'],false);
            });
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值