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

如何通过JS在HTML中按层级渲染嵌套对象数组?

嵌套JSON数组的层级DIV渲染解决方案

1. 基础HTML容器

先准备一个用来承载树结构的容器:

<div id="tree-container"></div>

2. CSS样式(区分层级)

给节点添加样式,通过缩进直观体现层级关系:

.node {
  border: 1px solid #ccc;
  padding: 8px;
  margin: 4px 0;
  border-radius: 4px;
  background-color: #f9f9f9;
}
.children-container {
  margin-left: 24px; /* 子节点缩进,明确层级 */
}

3. JavaScript递归渲染代码

核心用递归遍历嵌套结构,确保每个子节点挂载到对应父节点的DOM元素下:

// 获取主容器
const container = document.getElementById('tree-container');

// 递归渲染单个节点
function renderNode(node, parentEl) {
  // 创建当前节点的DIV元素
  const nodeDiv = document.createElement('div');
  nodeDiv.className = 'node';
  nodeDiv.textContent = `${node.name} (ID: ${node.id})`;
  
  // 把节点添加到父容器
  parentEl.appendChild(nodeDiv);
  
  // 如果有子节点,创建子容器并递归渲染
  if (node.children?.length) {
    const childrenWrap = document.createElement('div');
    childrenWrap.className = 'children-container';
    nodeDiv.appendChild(childrenWrap);
    
    node.children.forEach(child => {
      renderNode(child, childrenWrap);
    });
  }
}

// 你的原始数据
const treeData = [
  {
    "id": "1",
    "name": "sara",
    "children": [
      { "id": "2", "name": "dian" },
      {
        "id": "3",
        "name": "michael",
        "children": [
          { "id": "4", "name": "dkny" },
          { "id": "5", "name": "Anne" }
        ]
      }
    ]
  },
  { "id": "6", "name": "Tommy" },
  {
    "id": "7",
    "name": "danken",
    "children": [ { "id": "8", "name": "biria" } ]
  }
];

// 渲染所有根节点
treeData.forEach(root => renderNode(root, container));

结构混乱的原因

之前渲染出错多半是因为没把子节点挂载到对应父节点的DOM元素里,而是直接将所有节点都添加到了根容器,导致层级丢失变成扁平结构。递归的关键就是让每个子节点的父容器是它上一级节点的DIV,这样才能形成正确的嵌套层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:25:25