鉴于您说“尽可能着色”,我将提供一个示例解决方案,它不会按照您想要的方式进行颜色处理(它以一种我发现更容易编码和更有吸引力的方式来处理)但确实可以处理对于不同的表格大小,所有编号都正确。
下面的函数假设表已经存在;在这个演示中,我包含了代码,该代码可以生成您指定的任何大小的表格,然后调用下面的函数来进行编号和颜色。
function numberDiagonally(tableId) {
var rows = document.getElementById(tableId).rows,
numRows = rows.length,
numCols = rows[0].cells.length,
sq = numRows + numCols - 1,
d, x, y,
i = 1,
dc,
c = -1,
colors = ["green","yellow","orange","red"];
diagonalLoop:
for (d = 0; d < sq; d++) {
dc = "diagonal" + d;
for (y = d, x = 0; y >= 0; y--, x++) {
if (x === numCols)
continue diagonalLoop;
if (y < numRows)
$(rows[y].cells[x]).html(i++).addClass(dc);
}
}
for (d = 0; d < sq; d++)
$(".diagonal" + d).css("background-color", colors[c=(c+1)%colors.length]);
}
演示:http: //jsfiddle.net/7NZt3/2
我想出的一般想法是想象一个正方形是 x 和 y 尺寸中较大的一个的两倍大,然后使用循环从该边界正方形的左边缘向上和向右创建对角线 - 即,按照你想要的数字的顺序。编辑:为什么是长边的两倍?因为这是我开始编写代码时首先想到的事情并且它起作用了(请注意,i
保存所显示数字的变量不会为虚构单元格增加)。现在我有时间思考了,我意识到我的sq
变量可以精确地设置为比行数加上列数小一——对于非方形表来说,这个数字最终会变得相当小。上面的代码和小提琴相应地更新。
请注意,背景颜色可以直接在第一个循环中设置,但我选择分配类并稍后为每个类设置循环。当时似乎是个好主意,因为这意味着可以在 jQuery 中使用单个类选择器轻松选择单个对角线。
准确解释其余部分的工作原理留给读者作为练习......
更新 - 这个版本的颜色更像你要求的:http: //jsfiddle.net/7NZt3/1/(在我看来不是那么漂亮,但每个人都有他自己的)。