jquery表格合并插件
admin 发布于:2015-06-10 15:31:36
阅读:loading
前一段时间需要使用单元格合并,网上查了N下,找到了一个jquery实现的合并单元格插件,比较简单,其中在项目里面使用到了纵向合并单元格的功能(横向没有用到,故不敢保证一定没问题),参考代码如下:
//函数说明:合并指定表格(表格id为_w_table_id)指定列(列数为_w_table_colnum)的相同文本的相邻单元格
//参数说明:_w_table_id 为需要进行合并单元格的表格的id。如在HTMl中指定表格 id="data" ,此参数应为 #data
//参数说明:_w_table_colnum 为需要合并单元格的所在列。为数字,从最左边第一列为1开始算起。
function _w_table_rowspan(_w_table_id, _w_table_colnum) {
_w_table_firsttd = "";
_w_table_currenttd = "";
_w_table_SpanNum = 0;
_w_table_Obj = $(_w_table_id + " tr td:nth-child(" + _w_table_colnum + ")");
_w_table_Obj.each(function(i) {
if (i == 0) {
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
} else {
_w_table_currenttd = $(this);
if (_w_table_firsttd.text() == _w_table_currenttd.text()) {
_w_table_SpanNum++;
_w_table_currenttd.hide(); // remove();
_w_table_firsttd.attr("rowSpan", _w_table_SpanNum);
} else {
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
}
}
});
}
横向合并
// 函数说明:合并指定表格(表格id为_w_table_id)指定行(行数为_w_table_rownum)的相同文本的相邻单元格
// 参数说明:_w_table_id 为需要进行合并单元格的表格id。如在HTMl中指定表格 id="data" ,此参数应为 #data
// 参数说明:_w_table_rownum 为需要合并单元格的所在行。其参数形式请参考jQuery中nth-child的参数。
// 如果为数字,则从最左边第一行为1开始算起。
// "even" 表示偶数行
// "odd" 表示奇数行
// "3n+1" 表示的行数为1、4、7、10.......
// 参数说明:_w_table_maxcolnum 为指定行中单元格对应的最大列数,列数大于这个数值的单元格将不进行比较合并。
// 此参数可以为空,为空则指定行的所有单元格要进行比较合并。
function _w_table_colspan(_w_table_id, _w_table_rownum, _w_table_maxcolnum) {
if (_w_table_maxcolnum == void 0) {
_w_table_maxcolnum = 0;
}
_w_table_firsttd = "";
_w_table_currenttd = "";
_w_table_SpanNum = 0;
$(_w_table_id + " tr:nth-child(" + _w_table_rownum + ")").each(function(i) {
_w_table_Obj = $(this).children();
_w_table_Obj.each(function(i) {
if (i == 0) {
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
} else if ((_w_table_maxcolnum > 0) && (i > _w_table_maxcolnum)) {
return "";
} else {
_w_table_currenttd = $(this);
if (_w_table_firsttd.text() == _w_table_currenttd.text()) {
_w_table_SpanNum++;
_w_table_currenttd.hide(); // remove();
_w_table_firsttd.attr("colSpan", _w_table_SpanNum);
} else {
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
}
}
});
});
}
function rowspanGrid(gridId , columnNumber){
var rows = $("#" + gridId).jqxGrid('getrows');
if(rows.length > 0){
var first = "";
var current = "";
var spanNum = 0;
var tds = $("#contenttable" + gridId + " > div");
if(tds.length == 0){
return;
}
tds.each(function(i){
if(i > rows.length){
return;
}
var td = $(this).find("div:nth-child(" + columnNumber + ")");
if(i == 0){
first = td;
spanNum = 1;
}else{
current = td;
if (first.text() == current.text()) {
spanNum++;
current.hide(); // remove();
var height = spanNum * 25;
first.css({
"line-height" : (height) + "px",//由于子元素中设置了margin-top=4
"height" : height + "px"
});
} else {
first = td;
spanNum = 1;
}
}
});
}
}
以上的代码实现其实是根据对比连续相邻的td的内容,当存在连续相同的数据,但是又不是一类的数据时,可以在文本显示的地方加一个能够确认唯一的一个标识<label/>将其隐藏起来,来做到数据列的有效合并。
此种方式的实现比较简单,但比较好用,经过改造已适用于jqWidgets、Bootstrap、CTP等UI框架中的table组件中。
点赞
发表评论
当前回复:作者