「可能であれば色付け」と言ったので、希望どおりに色を付けないソリューションの例を提供します(コーディングが簡単で、見た目がより魅力的であると感じた方法で行います)が、処理しますさまざまなテーブルサイズに対してすべての番号付けが正しく行われます。
以下の関数は、テーブルが既に存在することを前提としています。このデモでは、指定したサイズのテーブルを生成し、以下の関数を呼び出して番号付けと色を行うコードを含めました。
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 の寸法のどちらか大きい方の 2 倍の大きさの正方形を想像し、ループを使用して、その境界正方形の左端から右に上がる対角線を作成することでした。つまり、番号を希望する順序で。編集:長辺の 2 倍の大きさはなぜですか? それは、コーディングを開始したときに頭に浮かんだ最初のことであり、機能したためです(i
表示される数値を保持する変数は、虚数セルに対してインクリメントされないことに注意してください)。sq
考える時間ができたので、行数と列数を足した数よりも正確に 1 少ない数に変数を設定できることに気付きました。上記のコードとそれに応じて更新されたフィドル。
背景色は最初のループで直接設定できますが、代わりに、クラスを割り当てて、後で各クラスのループを設定することを選択したことに注意してください。当時は、単一のクラス セレクターを使用して jQuery で個々の対角線を簡単に選択できることを意味していたため、良いアイデアのように思えました。
残りがどのように機能するかを正確に説明することは、読者の演習として残されています...
更新 - このバージョンは、あなたが求めたように色付けを行います: http://jsfiddle.net/7NZt3/1/ (私の意見では、それほどきれいではありませんが、それぞれ独自のものです)。