如何用HTML的details标签展示JSON数据树形结构

大芳君_9058

大芳君_9058

2026-08-28

993人浏览

原创

标签本身不支持 json 展开折叠逻辑,需 javascript 递归生成嵌套结构并配合 css 实现树形效果,大 json 需懒加载或截断,生产环境推荐成熟库。

如何用html的details标签展示json数据树形结构

details 标签本身不支持 JSON 展开折叠逻辑

<details></details> 是纯 HTML 原生标签,只提供单层手动展开/收起能力,无法自动解析 JSON、生成嵌套 <details></details> 结构或响应点击动态加载。直接写 <details><summary>data</summary>{"name":"alice"}</details> 会把 JSON 当作纯文本显示,既不格式化也不可交互。

真正实现“JSON 树形结构”需要 JavaScript 配合 —— 用递归生成带 <details></details> 的 DOM,再加基础样式控制缩进和箭头。

用递归函数把 JSON 对象转成 details 嵌套结构

核心是写一个函数,对每个值类型(对象、数组、字符串、数字等)分别处理:对象/数组递归生成子 <details></details>,基础类型转为 <span></span> 显示。注意避开循环引用,控制最大递归深度防栈溢出。

Comprehensive Three.js 3D graphics reference
Comprehensive Three.js 3D graphics reference

详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。

下载
  • typeofArray.isArray() 准确判断类型,别只靠 obj.constructor === Object
  • 键名要转义,防止 XSS:key.replace(/["]/g, ''),再放进 <summary></summary>
  • 给每层 <details></details>class="json-details" 方便后续 CSS 控制缩进和箭头
  • 示例片段:
    function jsonToDetails(obj, depth = 0) {
      if (depth > 10) return '<span>[max depth reached]</span>';
      if (obj === null) return '<span>null</span>';
      if (typeof obj === 'object') {
        const entries = Array.isArray(obj)
          ? obj.map((v, i) => `<div class="json-item">${i}: ${jsonToDetails(v, depth + 1)}</div>`).join('')
          : Object.entries(obj).map(([k, v]) => 
              `<div class="json-item">"${k}": ${jsonToDetails(v, depth + 1)}</div>`
            ).join('');
        return `<details class="json-details"><summary>${Array.isArray(obj) ? `Array(${obj.length})` : 'Object'}</summary>${entries}</details>`;
      }
      return `<span>${JSON.stringify(obj)}</span>`;
    }

必须补上 CSS 才能有树形视觉效果

原生 <details></details> 没缩进、没箭头、summary 和内容混排。得用 CSS 强制控制:

  • margin-left 每层增加缩进:.json-details { margin-left: 1.2em; }
  • 隐藏默认箭头,用 ::marker 或背景图重绘(注意 Safari 支持度):.json-details summary::marker { content: "▸ "; }
  • 折叠时隐藏子内容(<details></details> 默认行为),但需确保 .json-item 不撑开空白行:.json-details[open] > .json-item { margin-top: 0.2em; }
  • 加字体等宽和基础颜色提升可读性:font-family: ui-monospace, SFMono-Regular, monospace;

JSON 太大时页面会卡死,得做懒加载或截断

递归生成整个 DOM 在 JSON 超过几千行时会阻塞主线程,用户点击后要等好几秒才出结果。不能只依赖“等它跑完”。

  • 对数组/对象长度超过 50 的,先只渲染前 10 项 + “… + <button onclick="loadMore(...)">加载更多</button>
  • requestIdleCallback 分片生成,避免长时间无响应
  • 服务端提前做 JSON.stringify(obj, null, 2) 格式化并截断,前端只负责展示已处理好的片段
  • 浏览器 DevTools 里直接用 console.dir(obj) 查看结构更稳,<details></details> 方案适合嵌入文档或简单调试页

真正上线时,多数人会选 react-json-viewjson-tree-view 这类成熟库 —— 它们已处理好循环引用、性能分片、键盘导航、复制路径等细节。手写 <details></details> 方案只在极简场景或学习原理时值得投入。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

5015

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

2912

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2570

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2619

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4579

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

2561

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2349

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2148

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2128

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 207人学习