复杂表合并javascript&jquery算法
Complex table merging javascript & jquery algorithm
我有一个非常独特的问题,很难解决。我有一张2 x 3的桌子,安排如下。
nbsp nbsp_1____2__
1-|_____|____|
2-|_____|____|
3-|_____|____|
数据被填充到表格的单元格中。有时,列或行中的数据可能是相同的。例如,如果(1,1)和(1,2)具有相同的数据。在某些情况下,(1,1)、(1,2)和(1,3)都可以具有相同的数据。如果单元格中的值相同且相邻,则需要合并它们。例如,如果(1,1)和(1,2)的值都为"100",则这两个单元格将合并。我已经使用jquery手动完成了这项工作,比如:
(1,2).hide();
(1,1).attr("rowspan", "2");
我隐藏(1,2)单元格而不是删除,因为表可以重置为原始的2x3,然后在需要时重新填充。手动操作,效果很好,但我需要一个动态方法。以下是需要完成的总体目标。
- 如果两个垂直相邻的单元格或其相应列中的三个垂直相邻单元格的值相等,则这些单元格将合并在一起
- 行单元格,如(1,1)和(2,1),可能有重复的数据,并且永远不会合并
- 作为参考,兼容合并的单元格组为{(1,1),(1,2)},{
- 一次可能发生多个合并。例如:{(1,1),(1,2)}具有相同的数据,而{(2,1),(2,2),(2,3)}有相同的数据。两个组分别合并
我的主要问题是,在不写出所有可能的情况的情况下,我该如何编写一个算法来做到这一点。有人能给我举一个可行的例子吗?我意识到这很复杂,所以请随时提问澄清。非常感谢。这是一个巨大的帮助!
这样?http://jsfiddle.net/4zGvg/适用于任意行/列。
其思想是:我们有values
矩阵和span
矩阵。span
的值为
0=隐藏此单元格
1=正常细胞
x>1=具有行跨度的单元格x
按直接顺序按列迭代,按相反顺序按行迭代。如果某个单元格的值等于它下面的值,则增加该单元格的span
并删除下面单元格的span
:
for (var col = 0; col < cols; col++) {
for (var row = rows - 2; row >= 0; row--) {
if (values[row][col] == values[row + 1][col]) {
span[row][col] = span[row + 1][col] + 1;
span[row + 1][col] = 0;
}
}
}
完成此操作后,可以使用span
生成完整的表,或者显示/隐藏单元格并设置其行跨度属性。
因为它总是2x3,所以你可以粗暴对待它。
http://jsfiddle.net/Csxbf/
var $cells = $("td");
if ($cells.eq(0).text() == $cells.eq(2).text()) {
if ($cells.eq(2).text() == $cells.eq(4).text()) {
$cells.eq(2).hide();
$cells.eq(4).hide();
$cells.eq(0).attr("rowspan",3);
} else {
$cells.eq(2).hide();
$cells.eq(0).attr("rowspan",2);
}
} else if ($cells.eq(2).text() == $cells.eq(4).text()) {
$cells.eq(4).hide();
$cells.eq(2).attr("rowspan",2);
}
这肯定可以优化,这只是快速和肮脏。您肯定希望保存对单元格的引用,而不是多次调用eq
。你必须对第二列做同样的事情。
如果表可以更改大小,则需要在列中的每个单元格上循环,对于每个匹配的范围,隐藏匹配项并设置行跨度。相对容易,但在这里并不真正需要。
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JQuery合并了keyup和focusout两个函数
- 这个算法的非jquery等价物(纯JavaScript)是什么
- 复杂表合并javascript&jquery算法
- 使用jQuery计算金额的算法
- 如果仍在视图中,则用于更改DIV偏移的JQuery算法
- Javascript (JQuery)将数组处理为汇总数据的最优算法
- Javascript按算法排序,也许是jquery
- 用于 MOD 10 算法的 JQuery 或 Javascript 函数