Ext虽能够去除相同的单元格,但右侧数据左移致使grid错乱,有待解决。。。css
/** * Kunoy * 合并单元格 * @param {} grid 要合并单元格的grid对象 * @param {} cols 要合并哪几列 [1,2,4] */ var mergeCells = function(grid,cols) { var gridid = '#' + grid.getId() + '-body'; var arrayTr = $('tr', $(gridid)); var trCount = arrayTr.length; var arrayTd; var td; var merge = function(rowspanObj, removeObjs) { //定义合并函数 if (rowspanObj.rowspan != 1) { debugger; var colName = grid.columns[rowspanObj.td - 1].dataIndex;// colName.dataIndex arrayTd = arrayTr[rowspanObj.tr].getElementsByTagName("td"); //合并行 td = arrayTd[rowspanObj.td - 1]; td.rowSpan = rowspanObj.rowspan; td.vAlign = "middle"; Ext.each(removeObjs, function(obj) { //隐身被合并的单元格 debugger; arrayTd = arrayTr[obj.tr].getElementsByTagName("td"); arrayTd[obj.td-1].style.display='none'; //arrayTd[obj.td-1].style.borderTop = "none"; arrayTd[obj.td-1].style.backgroundColor = '#6633FF'; arrayTd[obj.td - 1].innerText = ''; $(arrayTd[obj.td - 1]).css("border-top",'1px solid red'); }); } }; var rowspanObj = {}; //要进行跨列操做的td对象{tr:1,td:2,rowspan:5} var removeObjs = []; //要进行删除的td对象[{tr:2,td:2},{tr:3,td:2}] var col; Ext.each(cols, function(colIndex) { //逐列去操做tr var rowspan = 0; var divHtml = null; //单元格内的数值 //debugger; for ( var i = 0; i < trCount; i++) { //i=0表示表头等没用的行 arrayTd = arrayTr[i].getElementsByTagName("td"); 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() { //debugger; rowspanObj["rowspan"] = rowspanObj["rowspan"] + 1; removeObjs.push({ tr : i, td : col }); if (i == trCount - 1) merge(rowspanObj, removeObjs); //执行合并函数 }; var mergef = function () { merge(rowspanObj, removeObjs); //执行合并函数 divHtml = cellText; rowspanObj = { tr: i, td: col, rowspan: rowspan } removeObjs = []; }; if (cellText == divHtml) { if(colIndex!=cols[0]){ mergef(); }else addf(); }else{ mergef(); } } } }); };
grid加载数据完成后自动调用合并方法java
duplicateQueryStore.on('load',function(){ //==>防止Grid重绘, 人工延迟 setTimeout(function(){ mergeCells(Ext.getCmp('duplicateGridId'),[6,7,8,9]); },150); });
注:可在Chorme浏览器上按F12键,经过debugger进行调试。浏览器