1. 程式人生 > >js豎列合併單元格

js豎列合併單元格

var fnMergeRowCell = function(maintbodyObj, limitRowOrRowIndexs) { var limitRow = null //從0~n列 var limitRowIndex = null; //具體限制某列,如[0,4,5] if(limitRowOrRowIndexs == undefined || limitRowOrRowIndexs == null) { limitRow = null
; limitRowIndex = null; } else { if($.isArray(limitRowOrRowIndexs)) { limitRowIndex = limitRowOrRowIndexs; limitRow = null; } else { limitRowIndex = null
; limitRow = limitRowOrRowIndexs; } } /** * 名稱說明 * 1. 主合併物件:設定rowspan的td * 2. 子合併物件:被隱藏的td * * 實現原理 * 1. 每行掃描,拿當前行和下一行做對比,如果值為一致,標記為主合併物件(在標記前要判斷是否為主標記物件,如果為子標記對物件進行data-ishide 標記 ), * 2. 下一行自動標記上主合併物件的 data-pid */
var callAttr = "data-main"; var dataPidKey = "data-cid"; var $tbody = $(maintbodyObj); var trs = $tbody.find("tr"); for(var i = 0; i < trs.length; i++) { var $cr = $(trs[i]); var $nr = $(trs[i + 1]); var $crtd = $cr.find("td"); //當前行下面的td var $nrtd = $nr.find("td"); //下一行下面的td if(limitRow == null) { limitRow = $crtd.length; } for(var r = 0; r < limitRow; r++) { if(null != limitRowIndex) { if(limitRowIndex.indexOf(r) == -1) { continue; } } var $crtdRow = $($crtd[r]); var $nrtdRow = $($nrtd[r]); //當前行對應的單元格的值 和 下一行對應的單元格的值相同 if($crtdRow.html() == $nrtdRow.html()) { var dataId = $crtdRow.attr(dataPidKey); //如果為隱藏,則代表著這個已經是被合併的了,需要拿到data-pid if($crtdRow.attr(callAttr) != "false") { dataId = "coordinate_" + i + "_" + r; $crtdRow.attr(callAttr, "true").attr(dataPidKey, dataId); //標記主要主合併物件 } $nrtdRow.attr(callAttr, "false").attr(dataPidKey, dataId); $nrtdRow.hide(); } } } $tbody.find("[" + callAttr + "=true]").each(function(i, _d) { var dataPid = $(_d).attr(dataPidKey); $(_d).attr("rowspan", $tbody.find("[" + dataPidKey + "=" + dataPid + "]").length).addClass("center"); }); } fnMergeRowCell($("[name=maintbody]"), [0, 1, 2]);