0
<!DOCTYPE html>
<html>
<head>
    <title>Anti Chess</title>
</head>
<body>
    <h1 id="game_title">Anti Chess by theManikJindal</h1>
    <br />
    <br />

    <table id="game"></table>
    <script>
        var white = 1;
        var ta = document.getElementById("game");
        if(white == 1)
        {
            for(var i=0;i<8;i++)
            {
                var x = document.createElement('tr');
                ta.appendChild(x);
                for(var j=0;j<8;j++)
                {
                    var y = document.createElement('td');
                    ta.childNodes[i].appendChild(y);
                    ta.childNodes[i].childNodes[j].setAttribute("id",String.fromCharCode(j+97)+(8-i).toString());
                }

            }

        }
        else
        {
            for(var i=0;i<8;i++)
            {
                var x = document.createElement('tr');
                ta.appendChild(x);
                for(var j=0;j<8;j++)
                {
                    var y = document.createElement('td');
                    ta.childNodes[i].appendChild(y);
                    ta.childNodes[i].childNodes[j].setAttribute("id",String.fromCharCode(104-j)+(i+1).toString());
                }

            }

        }
    </script>
</body>
</html>

このスクリプトが機能しない理由がわかりません。Javascript 用の優れたデバッガーはありますか、それとも意味をなすために頭を壁にぶつけ続けなければなりませんか。

助けてください

スクリプトは 8x8 ボックスのテーブルを作成し、属性 ID は "a8"、"b8"、"c8"..."h8" から "a1"、"b1"、"c1" に設定する必要があります。 ."h1" . 白の値が 1 の場合の a。また、白が 1 でない場合は、"h"、"g1"、"f1"..."a1" から "h8"、"g8"、..."a8" まで. white =1 がデフォルトです。

4

4 に答える 4

3

テーブルには常に少なくとも 1 つの<tbody>要素が必要です。そうでない場合は、ブラウザが作成します。

childNodesこれは、アクセス全体が間違っていることを意味します。

このHTMLをお勧めします:

<table><tbody id="game"></tbody></table>

これでコードが機能するはずですが、さらに単純化できます。

var white = 1, a = "a".charCodeAt(0), i, j, x, ta = document.getElementById("game");
for(i=0;i<8;i++) {
    x = document.createElement('tr');
    for(j=0;j<8;j++)
        x.appendChild(document.createElement('td')).id =
               String.fromCharCode((white == 1 ? j : 8-j)+a)+(white == 1 ? 8-i : i+1);
    ta.appendChild(x);
}

ご覧のとおり、white == 1チェックを最も関連性の高い場所に移動することで、コード ブロック全体を繰り返す必要がなくなりました。また、参照をさらに活用しx、「魔法の」値を、後で戻ってきたときに理解しやすいもの (a変数) に置き換えました。

お役に立てれば!

編集:また、テーブルにコンテンツがないことに気付きました-これは、表示されないという意味ですか? 表のセルを表示するための適切な CSS があることを確認してください。

于 2013-05-05T19:32:28.967 に答える
0

スクリプトは正常に動作しています。ID が td タグに出力されるようにいくつかのループを追加して、何が起こっているかを確認できるようにしました。http://jsfiddle.net/5YRKx/

        var tableTemp = document.getElementById("game");

    for (var ii = 0, row; row = tableTemp.rows[ii]; ii++) {
       //iterate through rows
       //rows would be accessed using the "row" variable assigned in the for loop
       for (var j = 0, col; col = row.cells[j]; j++) {
        row.cells[j].innerHTML  =  row.cells[j].id;
       }  
    }
于 2013-05-05T20:22:39.420 に答える