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

JS渲染二维数组彩色格子时仅显示十进制数该如何解决

问题修正&解决方案

原有代码核心问题

  • 二维数组元素被赋值为基础数字类型,无法追加className属性,属于类型错误
  • 取色器取值方法错误,你通过getElementsByClassName获取元素集合,实际应该通过id获取取色器的选中颜色值
  • 生成单元格时未绑定背景色配置,反而将随机数直接填充到了单元格内容中
  • 多次调整尺寸时旧表格没有被清理,会出现多个表格堆叠的问题

修正后代码

可选补充CSS(用于规范格子显示效果)

#board table td {
  width: 20px;
  height: 20px;
  border: 1px solid #eee;
}

修正后JS代码

let adjustSize = document.getElementById("dimension");
const board = document.querySelector("#board");

adjustSize.addEventListener("change", function () {
  let size = parseInt(adjustSize.value);
  // 先清空旧表格
  board.innerHTML = "";
  // 提前获取两个取色器的选中颜色值
  const popXColor = document.getElementById("popXcolor").value;
  const popYColor = document.getElementById("popYcolor").value;
  
  var array = [];
  for (let i = 0; i < size; i++) {
    array[i] = [];
    for (let j = 0; j < size; j++) {
      // 数组存储对应格子的颜色即可
      array[i][j] = Math.random() < 0.5 ? popXColor : popYColor;
    }
  }
  drawTable(array);
});

function drawTable(array) {
  let t = document.createElement("table");
  for (let i = 0; i < array.length; i++) {
    let tr = document.createElement("tr");
    for (let j = 0; j < array[i].length; j++) {
      let td = document.createElement("td");
      // 给单元格设置背景色,不需要填内容可以留空
      td.style.backgroundColor = array[i][j];
      tr.appendChild(td);
    }
    t.appendChild(tr);
  }
  board.appendChild(t);
  return t;
}

改动说明

  1. 提前获取两个取色器的选中颜色值,直接存入二维数组,不需要额外存储其他属性
  2. 每次调整尺寸前先清空容器内的旧表格,避免重复生成
  3. 生成td时直接给单元格绑定背景色样式,不需要填充数字内容
  4. 修正了取色器id大小写不匹配、取数方法错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:45:08