Jquery 合并表格单元内容相同的单元

本文介绍了一种用于合并表格中同类项的算法实现。该算法通过比较相邻单元格的内容来判断是否可以进行合并,并采用递归的方式完成整个表格的处理。适用于需要整理数据、减少重复项的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


没合并之前的表格


合并要求是属于父类是同类的列才能合并


合并后的表格内容是


形成了一个类似树一样的摸样


代码

/**
 * 
 * @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)	
		}
		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值