没合并之前的表格
合并要求是属于父类是同类的列才能合并
合并后的表格内容是
形成了一个类似树一样的摸样
代码
/**
*
* @param {Object} _table_id tableid
* @param {Object} _table_row_start 要合并的最小列号
* @param {Object} _table_row_end 要合并的最大列号
* @param {Object} _table_startcol 合并的最大行号
* @param {Object} _table_endcol 合并的最小行号
*/
function _table_row_merge_cell(_table_id, _table_row_start,_table_row_end,_table_startcol,_table_endcol){
var table = $(_table_id);
//总的列数
var _merge_num = 0;
var _current_td = "";
var _first_td = ""
var ismerge = false; //合并标示符 当有单元格合并时为true,此标识为了防止出现一列合并完成后,不在惊醒下一列的合并
if( _table_row_end == void 0 ){_table_row_end = table.find('tr:eq(1) td').length} //初始化最小列号
if( _table_row_start == void 0 ){ _table_row_start = 0 } //初始化最大列号
if( _table_startcol == void 0){ _table_startcol = 1; } //开始的行号
if( _table_endcol == void 0){ _table_endcol = table.find('tr').length; } //结束的行号
var i = _table_row_start;
if(i >= _table_row_end){return} //超过最大列号后自动退出
for(var j = _table_startcol ; j < _table_endcol ; j++){ //行循环
if(j == _table_startcol){
_first_td = table.find('tr:eq('+j+') td:eq('+i+')')
_merge_num = 1;
}else{
_current_td = table.find('tr:eq('+j+') td:eq('+i+')')
if(_current_td.text() == _first_td.text()){
_merge_num++;
_current_td.hide(); //remove();
_first_td.attr("rowSpan",_merge_num);
ismerge = true
// _table_row_merge_cell(_table_id,(i+1),_table_row_end,j-1,j)
}else{
//嵌套调用 ,开始列为当前列的下一列,结束列仍为最后的列,开始行号为当前行号
if(_merge_num > 1 ){
_table_row_merge_cell(_table_id,(i+1),_table_row_end,j-_merge_num,j)
}
_first_td = table.find('tr:eq('+j+') td:eq('+i+')')
_merge_num = 1;
ismerge = false;
}
}
}
//进行下一列的合并
if( ismerge){
_table_row_merge_cell(_table_id,(i+1),_table_row_end,(_table_endcol-_merge_num),_table_endcol)
}
}