You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DOM创建的国际象棋棋盘添加对应数字与字母标识?

给DOM创建的国际象棋棋盘添加数字和字母标识的实现思路

不用手动逐个选中元素添加标识,推荐两种高效的实现方式,直接在创建DOM元素的过程中完成标识添加:

方式一:新增标识行列(布局清晰)

给现有8x8的棋盘表格,额外添加左侧的数字列(1-8)和底部的字母行(a-h),国际象棋的行号是从下到上计数,列标从左到右a-h,可通过循环计算直接生成:

// 创建center标签居中元素
var center = document.createElement('center');
 
// 创建棋盘表格
var ChessTable = document.createElement('table');
for (var i = 0; i < 8; i++) {
    // 创建行
    var tr = document.createElement('tr');
    
    // 先添加左侧的行号标识单元格
    var numTd = document.createElement('td');
    numTd.textContent = 9 - i; // 国际象棋行号从下到上1-8,i从0到7对应8到1,转成1-8
    numTd.style.width = '20px';
    numTd.style.textAlign = 'center';
    tr.appendChild(numTd);

    for (var j = 0; j < 8; j++) {
        // 创建棋盘格子单元格
        var td = document.createElement('td');

        // 设置格子颜色
        if ((i + j) % 2 == 0) {
            td.setAttribute('class', 'cell whitecell');
        } else {
            td.setAttribute('class', 'cell blackcell');
        }
        tr.appendChild(td);
    }
    ChessTable.appendChild(tr);
}

// 添加底部的字母标识行
var letterTr = document.createElement('tr');
// 先加一个空单元格对齐左侧行号
var emptyTd = document.createElement('td');
letterTr.appendChild(emptyTd);
for (var j = 0; j < 8; j++) {
    var letterTd = document.createElement('td');
    letterTd.textContent = String.fromCharCode(97 + j); // 97是a的ASCII码,j从0到7对应a到h
    letterTd.style.width = '20px';
    letterTd.style.textAlign = 'center';
    letterTr.appendChild(letterTd);
}
ChessTable.appendChild(letterTr);

center.appendChild(ChessTable);

// 设置表格属性
ChessTable.setAttribute('cellspacing', '0');
ChessTable.setAttribute('width', '310px'); // 加上行号列的宽度
document.body.appendChild(center);

// 基础样式优化
var style = document.createElement('style');
style.textContent = `
.cell {
    width: 30px;
    height: 30px;
}
.whitecell {
    background-color: #f0d9b5;
}
.blackcell {
    background-color: #b58863;
}
`;
document.head.appendChild(style);

方式二:直接在棋盘格子内嵌标识(紧凑布局)

如果不想额外加行列,可以直接在棋盘的边缘格子里嵌入标识:

// 创建center标签居中元素
var center = document.createElement('center');
 
// 创建棋盘表格
var ChessTable = document.createElement('table');
for (var i = 0; i < 8; i++) {
    var tr = document.createElement('tr');
    for (var j = 0; j < 8; j++) {
        var td = document.createElement('td');

        // 设置格子颜色
        if ((i + j) % 2 == 0) {
            td.setAttribute('class', 'cell whitecell');
        } else {
            td.setAttribute('class', 'cell blackcell');
        }

        // 添加行号:第一列的格子(j=0)添加行号
        if (j === 0) {
            td.textContent = 9 - i;
            td.style.textAlign = 'left';
            td.style.paddingLeft = '2px';
        }
        // 添加列标:最后一行的格子(i=7)添加字母
        if (i === 7) {
            // 如果已经有行号,就把列标放在右下角
            if (j === 0) {
                td.innerHTML = `${9 - i}<span style="float:right; padding-right:2px;">${String.fromCharCode(97 + j)}</span>`;
            } else {
                td.textContent = String.fromCharCode(97 + j);
                td.style.textAlign = 'right';
                td.style.paddingRight = '2px';
            }
        }

        tr.appendChild(td);
    }
    ChessTable.appendChild(tr);
}

center.appendChild(ChessTable);

// 设置表格属性
ChessTable.setAttribute('cellspacing', '0');
ChessTable.setAttribute('width', '270px');
document.body.appendChild(center);

// 基础样式优化
var style = document.createElement('style');
style.textContent = `
.cell {
    width: 30px;
    height: 30px;
}
.whitecell {
    background-color: #f0d9b5;
}
.blackcell {
    background-color: #b58863;
}
`;
document.head.appendChild(style);

这两种方式都不需要手动选中每个元素,而是在循环创建DOM的时候直接完成标识添加,比手动操作高效得多,也更易维护。

内容的提问来源于stack exchange,提问作者VXVNII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:55:19