js豎列合併單元格
阿新 • • 發佈:2019-01-03
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]);