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

如何使用JavaScript Object配合Bootstrap Tables实现新冠疫情数据表格展示

问题排查与实现方案

原方案不可行,存在如下问题

  • ID重复违规:HTML规范要求同一个ID在页面中只能出现一次,原代码中cases/newCases/death/newDeath四个ID被多个单元格复用,会导致JS选择元素异常,无法正确赋值
  • 执行顺序错误:JS代码先执行DOM赋值操作,后定义数据数组,此时cases等变量未定义,直接报错无法渲染
  • 数据结构与DOM不匹配:现有dailyOverview仅存储了单组单日数据,而表格表头为多省份列,数据维度和表格结构无法对应
  • DOM加载时机问题:如果脚本不是放在body最末尾,DOM未渲染完成就执行getElementById会获取到空值

正确实现步骤

1. 修正HTML结构(移除重复ID,增加属性标识)

<table class="table table-striped table-dark">
  <thead>
    <tr>
      <th scope="col">统计指标</th>
      <th scope="col">Quebec</th>
      <th scope="col">Ontario</th>
      <th scope="col">Manitoba</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">累计确诊</th>
      <td data-province="quebec" data-metric="cases"></td>
      <td data-province="ontario" data-metric="cases"></td>
      <td data-province="manitoba" data-metric="cases"></td>
    </tr>
    <tr>
      <th scope="row">新增确诊</th>
      <td data-province="quebec" data-metric="newCases"></td>
      <td data-province="ontario" data-metric="newCases"></td>
      <td data-province="manitoba" data-metric="newCases"></td>
    </tr>
    <tr>
      <th scope="row">累计死亡</th>
      <td data-province="quebec" data-metric="death"></td>
      <td data-province="ontario" data-metric="death"></td>
      <td data-province="manitoba" data-metric="death"></td>
    </tr>
    <tr>
      <th scope="row">新增死亡</th>
      <td data-province="quebec" data-metric="newDeath"></td>
      <td data-province="ontario" data-metric="newDeath"></td>
      <td data-province="manitoba" data-metric="newDeath"></td>
    </tr>
  </tbody>
</table>

2. 调整JS代码(先定义数据,后操作DOM)

// 定义所有省份的统计数据,可根据实际数据源更新
const covidData = {
  quebec: {
    cases: 395155,
    newCases: 703,
    death: 11297,
    newDeath: 1
  },
  ontario: {
    cases: 592341,
    newCases: 856,
    death: 9872,
    newDeath: 3
  },
  manitoba: {
    cases: 62189,
    newCases: 124,
    death: 1248,
    newDeath: 0
  }
}

// 等DOM完全加载后再执行赋值操作
document.addEventListener('DOMContentLoaded', () => {
  // 遍历所有带标识的单元格赋值
  document.querySelectorAll('[data-province][data-metric]').forEach(cell => {
    const province = cell.dataset.province
    const metric = cell.dataset.metric
    cell.textContent = covidData[province][metric]
  })
})

3. 脚本引入位置

将<script src="/module/index.js"></script>放在</body>标签之前,避免DOM未加载完成的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:21:02