合并的效果图
代码:
render: function(){
/**
* landmark = y ,diffs = x
*/
var iterateMerge = function(landmark,diffs){
if(diffs.length<1 || landmark.length<1){
return ;//exit
}
//目前是先合并行,再循环列
var last =false;//上一行是被合并的吗
var firstRow = landmark[0];
var colsindex = rows[firstRow].cells.length-diffs[0];
var mergeCell = $(rows[firstRow].cells[colsindex]);
var counter = 2;
var landmark_2 = $A(landmark);
for(var j=1;j<landmark.length;j++){
var rowindex = landmark[j];
/*
* 前依赖的行合并,需要考虑前面列合并后,后面列序号变化的事实
* 观察得,z左依赖,右计数
*/
colsindex = rows[rowindex].cells.length-diffs[0];
var tempCell = $(rows[rowindex].cells[colsindex]);
if(mergeCell.innerHTML == tempCell.innerHTML){
//do sth
tempCell.destroy();
mergeCell.addClass("crossCell");
mergeCell.set("rowspan", counter++);
last=true;
//
if(j==landmark.length-1){//the last merged one
iterateMerge(landmark_2,diffs.slice(1));
return ;
}
}else{
mergeCell = tempCell;
if(!last){
landmark_2.erase(landmark[j-1]);
}else{//last one was merged,but this not
var offset = landmark_2.indexOf(landmark[j]);
iterateMerge(landmark_2.slice(0,offset),diffs.slice(1));
iterateMerge(landmark_2.slice(offset),diffs);
return ;
}
}
}
}
// iterateMerge end
var landmark = new Array();
var rows = this.container.rows;
var cellsLength = rows[0].cells.length;
for(var k=0;k<10;k++){
landmark.push(k);
}
var sorted = this.columns.sort(function(a,b){return a-b;});
var diffs = new Array();
for(var x = 0,l= sorted.length;x<l;x++){
diffs.push(cellsLength-sorted[x]);
}
iterateMerge(landmark,diffs);
}
这实现的关键在:
1.左依赖,需要递归,需要分组
2.右计数(原因见注释)
代码使用了mootools的基础库。
landmark值要合并的行的数组
this.columns是需要合并列的数组。
diffs是使用右计数的this.columns的对应差数组
明白这个后其实就可以做右依赖了。
其实这个是典型的汉诺塔问题。
稍微有点变形而已。
假设:
问题为:F
[A-G] 为landmark数组[1-10]为列数组
那么
F =function([A-G],[1-10]){
//do sth
F([x-D],[1-10]);
F([E-G],[2-10]) ;
}
问题就转为为如何确定x的值。
- 大小: 15.3 KB
分享到:
相关推荐
js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格js合并单元格
jxls2.0支持合并单元格和合并单元格模板写入数据,jar包里已经包含了pom.xml,可以自行解压方便上传到maven私服,这种方式会带上依赖,否则要一个个手动添加依赖.pom在jar包里jxls-core\2.0\jxls-core-2.0\META-INF\...
jasperReport 动态合并单元格示例
jquery datatable 单元格合并,通过js实现相同内容单元格动态合并!!!jquery datatable 单元格合并,通过js实现相同内容单元格动态合并!!!
Word NPOI 合并单元格示例
wpf GridView 合并单元格 Demo 简单 适合新手 使用工具vs2017
vue-easytable合并单元格,文档包括ftl文件及对应的js
layui table合并单元格.zip 跨行自动合并单元格
可以实现上图表格的合并导出,只需添加表头的值和合并单元格的数量,设置单元格的样式(字体,字体大小,字体颜色,是否加粗,是否居中)即可。
DevExpress 编辑GridControl中合并单元格,要求版本号在15以上
DataGridView合并单元格(纵向合并及横向合并)
dbgrideh 实现有条件合并单元格的例子 内含修改的dbgrideh 4.2控件
devexpress gridcontrol 横向合并单元格,字体自动换行
js导出execl,自动合并单元格,自动增行,增列
java excel poi合并单元格
poi获取合并单元格,Java 对excel 文档处理。
WPF Datagrid 合并单元格 复杂表头 支持位置拖动、 列宽度拖动,组内列会按比例自动调整 ;
编程人员可以通过此方法动态的合并单元格,方便您在操作中动态的合并
easyExcel导出合并单元格策略 WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)) .registerWriteHandler(new CustomCellWriteHandler()) //设置合并单元格策略 .registerWriteHandler(new ...