html怎么创建菜单管理配置页面_html后台菜单树形配置管理页面【避坑】

夜婷姑娘_3876

夜婷姑娘_3876

2026-05-27

221人浏览

原创

用html+javascript渲染可拖拽树形菜单配置界面,需将扁平化菜单数据(含id、parent_id)递归转为嵌套结构,绑定sortablejs或原生dragover/drop事件实时更新dom与localstorage中的扁平数组,确保拖拽后同步计算parent_id和sort_order,并在onend回调中立即持久化,避免刷新丢失状态。

html怎么创建菜单管理配置页面_html后台菜单树形配置管理页面【避坑】

怎么用 HTML + JavaScript 渲染可拖拽的树形菜单配置界面

纯 HTML 无法实现动态菜单管理,必须配合 JavaScript(推荐使用 SortableJS 或原生 dragover/drop API)。核心是把菜单数据结构化为嵌套数组或对象,再递归渲染成 <ul><li></ul>,同时绑定拖拽事件更新层级关系。

常见错误:直接写死 HTML 列表、不维护数据源与 DOM 的同步、忽略拖拽时的 placeholder 定位不准问题。

  • 菜单数据建议用扁平数组 + parent_id 字段(比嵌套对象更易存库、排序、查找)
  • 渲染时用递归函数生成带 data-id 和 data-parent-id 的 <li> 元素
  • 启用 SortableJS 时,必须设置 group: { name: 'menu' } 并开启 sort: true 和 animation: 150 防止视觉跳动
  • 拖拽结束时,用 el.sortable.toArray() 获取新顺序,并遍历计算每个节点的 parent_id 和 sort_order

后端返回的菜单 JSON 怎么适配前端树形渲染

后端通常返回扁平结构(如权限系统常用),字段包括 id、name、url、parent_id、sort。前端需先转成树形,但注意:不能简单按 parent_id === 0 判定根节点——有些系统用 null 或空字符串表示顶层。

转换函数关键点:

  • 先用 Array.reduce() 构建 id → node 映射表
  • 再遍历一次原始数组,对每个节点:若 parent_id 存在且在映射表中,则 push 到其 children 数组;否则加入根数组
  • 务必处理 parent_id 类型不一致问题(后端可能传字符串 "1",前端比较时要用 String(parent_id) === String(id))
  • 避免无限递归:检查是否存在循环引用(如 A 的 parent_id 是 B,B 的 parent_id 又是 A)

点击“保存配置”时,如何生成符合后端要求的提交数据

后端接口一般不接受嵌套结构,而是要扁平数组,且要求每个菜单项包含 id、parent_id、sort(同级排序序号)、is_hidden 等字段。前端必须从 DOM 树中还原出这个结构。

html-deploy
html-deploy

使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。

下载

实操要点:

  • 不要依赖 DOM 的视觉顺序(比如用 querySelectorAll('li').forEach()),而应基于拖拽后更新的数据源生成
  • 递归遍历树形数据时,用一个全局 counter 记录当前层级内序号,每进入一个子节点重置为 0
  • 对每个节点,确保 parent_id 是数字或 null(不是字符串 "0" 或 ""),否则后端可能解析失败
  • 提交前校验:根节点 parent_id 必须为 null 或 0(按后端约定),且无重复 id

为什么菜单配置页面刷新后丢失状态?localStorage 存什么、怎么存

单纯存 DOM HTML 字符串没用,下次加载仍需重新解析。应该只存「数据」而非「视图」。但也不能直接存整个树形结构——因为后端返回的原始数据可能不含 children 字段,存树形会导致前后端数据模型不一致。

推荐做法:

  • localStorage 中只存扁平数组(即后端返回格式),键名为 menu-config-cache
  • 每次页面加载时,优先读取缓存,再调用树形转换函数生成视图;若缓存不存在或格式异常,则请求后端
  • 在用户点击“保存”成功后,用 response.data(即后端确认后的最新扁平数组)覆盖 localStorage,避免本地缓存和服务器不一致
  • 注意:localStorage 的值是字符串,存之前必须 JSON.stringify(),取出来后要 JSON.parse() 并做 try-catch,防止损坏缓存导致白屏

最易被忽略的是:拖拽过程中未实时更新缓存,导致用户误操作后刷新就回退到旧状态。应在 onEnd 回调里立即更新 localStorage,而不是等到点击保存。

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

相关专题

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

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

2023.06.14

5575

7

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

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

2023.06.21

3172

4

html网页制作
html网页制作

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

2023.07.31

2850

5

html空格
html空格

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

2023.08.01

2859

5

html是什么
html是什么

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

2023.08.11

4719

6

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

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

2023.08.11

2821

3

html转txt
html转txt

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

2023.08.31

2609

3

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

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

2023.09.01

2348

6

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

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

2023.09.20

2368

5

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

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

共1课时 | 219人学习