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

使用vanilla JavaScript将JSON object展示为HTML table时内容显示异常的问题

vanilla JavaScript将JSON object展示为HTML table时内容显示异常的问题

我完全懂你现在的困惑——明明写了循环往表格里加行,结果内容却跑到表格外面去了,连<tr>和<td>标签都没了,这确实让人摸不着头脑。咱们来拆解一下问题出在哪,以及怎么解决。

首先还原你的代码场景:

你的JSON数据

const teams = {
  "1": {
    "channels": {
      "1_1": {
        "displayName": "General",
        "description": "Systeembeheer cq ICT Service groep"
      },
      "1_2": {
        "description": "Hier staan de tabbladen van het Ticketsysteem",
        "displayName": "TicketSysteem"
      }
    },
    "displayName": "ASC Systeembeheer",
    "description": "Systeembeheer cq ICT Service groep"
  },
  "2": {
    "channels": {
      "2_1": {
        "description": "Handleidingen",
        "displayName": "Handleidingen"
      },
      "2_2": {
        "description": null,
        "displayName": "Externe toegang"
      }
    }
  }
}

你的JS代码

var list = document.querySelector('#list');

list.innerHTML = '<table>';

for (let id in teams){
  list.innerHTML += `<tr><td>${id}</td></tr>`;
}

list.innerHTML += '</table>'

对应的HTML结构

<div id="list">
  <p>blaat</p>
</div>

问题根源

浏览器在处理innerHTML的时候,会自动修复不完整的HTML结构。当你执行list.innerHTML = '<table>'这一行时,浏览器发现这是一个未闭合的标签,会自动帮你补全成<table></table>——也就是说,这时候你的list里已经是一个完整的空表格了。

后面你再执行list.innerHTML += ...,本质上是把新的内容追加到这个表格的外面,而不是表格内部。而且因为浏览器会解析这些追加的字符串,<tr>和<td>标签因为不在<table>内部,会被浏览器当成无效标签直接丢弃,最后就只剩纯文本的id值了。

解决方案

有两种常用的办法可以解决这个问题:

方案1:先拼接完整的HTML字符串,再一次性赋值

先把整个表格的HTML代码在字符串里组装好,最后再一次性设置给innerHTML,这样浏览器就不会中途补全标签了:

var list = document.querySelector('#list');
let tableHtml = '<table>';

for (let id in teams){
  tableHtml += `<tr><td>${id}</td></tr>`;
}

tableHtml += '</table>';
list.innerHTML = tableHtml;

方案2:用DOM API创建元素(更推荐,更安全)

如果你不想拼接字符串,也可以直接创建DOM元素来构建表格,这样完全由你控制元素的嵌套关系:

var list = document.querySelector('#list');
const table = document.createElement('table');

for (let id in teams){
  const tr = document.createElement('tr');
  const td = document.createElement('td');
  td.textContent = id;
  tr.appendChild(td);
  table.appendChild(tr);
}

// 替换掉原来的内容
list.innerHTML = '';
list.appendChild(table);

这样两种方式都能让你的表格行正确嵌套在表格内部,不会再出现内容跑到外面的情况啦。

备注:内容来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:04:32