JavaScript 樹形菜單總結

樹形菜單是前端開發中常見的交互組件,用于展示具有層級關系的數據(如文件目錄、分類列表、組織架構等)。以下從核心概念、實現方式、常見功能及優化方向等方面進行總結。

一、核心概念

  • 層級結構:數據以父子嵌套形式存在,如{ id: 1, children: [{ id: 2 }] }
  • 節點:樹形結構的基本單元,包含自身信息及子節點(若有)。
  • 展開 / 折疊:子節點的顯示與隱藏切換,是樹形菜單的核心交互。
  • 遞歸渲染:因數據層級不固定,通常通過遞歸函數生成 DOM 結構。

二、數據格式設計

常見的樹形數據格式(以 JSON 為例):

javascript

const treeData = [{id: 1,label: "父節點1",// 可選:是否默認展開expanded: false,// 可選:是否禁用節點disabled: false,// 子節點(數組,無則為葉子節點)children: [{ id: 11, label: "子節點1-1", children: [] },{ id: 12, label: "子節點1-2" }]},{ id: 2, label: "父節點2" }
];

三、實現方式

1. 原生 JavaScript + DOM 操作

核心步驟

  1. 定義遞歸函數,根據數據生成節點 DOM。
  2. 為父節點添加點擊事件,控制子節點顯示 / 隱藏。
  3. 處理特殊狀態(如禁用、默認展開)。

示例代碼片段

javascript

function renderTree(data, container) {const ul = document.createElement("ul");data.forEach(node => {const li = document.createElement("li");li.innerHTML = `<span class="node-label ${node.disabled ? 'disabled' : ''}">${node.children?.length ? (node.expanded ? '▼' : '?') : '?'} ${node.label}</span>`;// 處理展開/折疊if (node.children?.length && !node.disabled) {li.querySelector(".node-label").addEventListener("click", () => {node.expanded = !node.expanded;li.querySelector("ul")?.classList.toggle("hidden");li.querySelector(".node-label").firstChild.textContent = node.expanded ? '▼' : '?';});// 遞歸渲染子節點const ch

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90582.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python實用小腳本-131】Python 實現 HTML 到 PDF 轉換:解決文檔處理痛點的高效工具

引言 在當今數字化辦公環境中&#xff0c;文檔格式的轉換需求日益頻繁。假設你是一位市場營銷人員&#xff0c;需要將公司網站的產品介紹頁面&#xff08;HTML 格式&#xff09;轉換為 PDF 文檔&#xff0c;以便用于線下宣傳。然而&#xff0c;手動復制粘貼內容并調整格式不僅…

【Linux操作系統】簡學深悟啟示錄:Linux基本指令

文章目錄1.什么是操作系統&#xff1f;2.Xshell的使用3.常用指令3.1 ls指令3.2 pwd指令3.3 cd指令3.4 touch指令3.5 mkdir指令3.6 rmdir指令 && rm指令3.7 man指令3.8 cp指令3.9 mv指令3.10 cat指令3.11 echo指令&#xff08;重定向&#xff09;3.12 more指令3.13 less…

「py數據分析」04如何將 Python 爬取的數據保存為 CSV 文件

如何將 Python 爬取的數據保存為 CSV 文件 從原始網絡數據到純凈 CSV - 搭建通往分析的橋梁 恭喜你&#xff01;經過前面的努力&#xff0c;你的 Python 腳本終于成功地從一個網站上爬取了數據&#xff0c;一個充滿信息的寶庫正靜靜地躺在你的變量中。但接下來呢&#xff1f;…

qemu vcpu的創建過程

在 QEMU 中&#xff0c;vCPU 線程的啟動流程涉及多個階段&#xff0c;包括初始化、線程創建和執行邏輯。以下是基于搜索結果的詳細分析&#xff1a; QEMU vCPU 線程的啟動流程 1. 初始化階段 設備實例化&#xff1a;QEMU 使用 QOM&#xff08;QEMU Object Model&#xff09;系統…

Spring Security架構與實戰全解析

Spring security1.安全架構1. 認證who are you登陸系統&#xff1a;用戶系統2. 授權權限管理&#xff1a;用戶授權3. 攻擊防護xss (cross-site scripting)csrf (cross-site request forgery)cors (cross-origin resource sharing)sql注入4. 擴展&#xff1a;權限管理模型a. RBA…

LeetCode Hot 100 搜索二維矩陣 II

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a;每行的元素從左到右升序排列。每列的元素從上到下升序排列。示例 1&#xff1a;輸入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[…

Windows Edge 播放 H.265 視頻指南

目錄 &#x1f4cc;前言 一 . 什么是 H.265&#xff08;HEVC&#xff09;&#xff1f; 二、為什么 Edge 默認不能播放 H.265&#xff1f; 三、Edge 播放 H.265 解決方案 1 . 查看顯卡是否支持硬解AMD GPU Decoder Device InformationNVIDIA GPU Decoder Device Informat…

線性代數--AI數學基礎復習

原文鏈接&#xff1a;Github-Funny_Mr_Zhi GNN_playground 參考&#xff1a;麻省理工公開課 線性代數 MIT Linear Algebra Chapter1 可以帶著問題去讀&#xff0c;線性代數到底是什么&#xff0c;矩陣又是什么。盡管深入學習數學需要一種抽離出現實和直觀理解的高度抽象思維&…

Cursor配置DeepSeek調用MCP服務實現任務自動化

文章目錄1. 任務需求2. 環境準備2.1 Cursor安裝2.2 Node.js安裝2.3 DeepSeek模型Key申請2.4 高德地圖Key申請3. MCP服務配置3.1 Cursor配置Server方式3.1.1全局設置3.1.2 項目級別設置3.2 MCP服務接入3.2.1 高德地圖MCP服務3.2.2 Mysql MCP服務3.2.3 FileSystem MCP服務3.2.4 驗…

java SpringBoot數據庫查詢 時間范圍查詢

exTime的類型為varchar 存儲的數據格式為yyy-MM-ddTHH:mm:ss,查詢時傳進來的時間格式也需要為yyy-MM-ddTHH:mm:ss格式Query(value "SELECT * FROM test_fbep fbep WHERE delFlag 1 " "AND IF(?1 ! AND ?1 IS NOT NULL, fbep.passId ?1, TRUE) " &q…

Linux 操作系統如何實現軟硬件解耦?從容器與硬件接口封裝談起

在計算機系統中&#xff0c;軟硬件解耦是提升系統靈活性、可移植性和可維護性的核心設計思想。Linux 作為開源操作系統的典范&#xff0c;通過數十年的演進形成了一套成熟的解耦機制。本文將從容器技術和硬件接口封裝兩個維度&#xff0c;深入解析 Linux 如何實現軟硬件解耦&am…

7月10號總結 (1)

今天開始寫web項目&#xff0c;畫了一下登錄界面&#xff0c;借鑒了一下網上的資源。 <!DOCTYPE html> <html lang"zh.CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

Docker 高級管理 -- 容器通信技術與數據持久化

目錄 第一節:容器通信技術 一&#xff1a;Docker 容器的網絡模式 1&#xff1a;Bridge模式 2&#xff1a;Host模式 3&#xff1a;Container模式 4&#xff1a;None模式 5&#xff1a;Overlay 模式 6&#xff1a;Macvlan 模式 7&#xff1a;自定義網絡模式 二&#xff…

鏈路管理和命令管理

第1章 鏈路管理在通信領域&#xff0c;鏈路&#xff08;Link&#xff09; 是兩個設備之間進行數據傳輸的物理或邏輯路徑。例如&#xff1a;網絡鏈路&#xff1a;TCP/IP 連接、UDP 通信、WebSocket串口鏈路&#xff1a;RS232、RS485、CAN 總線無線鏈路&#xff1a;藍牙、Wi-Fi、…

BERT模型基本原理及實現示例

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是Google在2018年提出的預訓練語言模型&#xff0c;其核心思想是通過雙向Transformer結構捕捉上下文信息&#xff0c;為下游NLP任務提供通用的語義表示。 一、模型架構BERT基于Transforme…

NPM組件包 json-cookie-csv 等竊取主機敏感信息

【高危】NPM組件包 json-cookie-csv 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 json-cookie-csv 等NPM組件包時會竊取用戶的主機名、用戶名、工作目錄、IP地址等信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-xo1f-4kue處置建議強烈建議修復發現時間2025-07-…

【Netty+WebSocket詳解】WebSocket全雙工通信與Netty的高效結合與實戰

一、 Netty網絡框架、WebSocket協議基礎 1.1 Netty網絡框架介紹 1.2 WebSocket簡介 1.3 WebSocket握手流程 二、為什么選擇NettyWebSocket&#xff1f; 三、NettyWebSocket與Spring WebSocket 3.1 架構層級對比 3.2 核心組件差異 3.3 協議支持深度 3.4 性能基準測試 3.5 開發…

5、Vue中使用Cesium實現交互式折線繪制詳解

引言 Cesium是一款強大的開源3D地理信息可視化引擎&#xff0c;廣泛應用于數字地球、地圖可視化等領域。在Vue項目中集成Cesium可以快速構建高性能的地理信息應用。本文將詳細介紹如何在Vue項目中實現交互式折線繪制功能&#xff0c;包括頂點添加、臨時繪制、距離計算等核心功…

mysql實戰之主從復制

原理圖理論&#xff1a;一、配置準備每臺主機都安裝mysql對每臺主機都進行對時操作&#xff0c;減少時間誤差[rooteveryone ~]# timedatectl set-timezone Asia/Shanghai [rooteveryone ~]# systemctl restart chronyd.service 對每臺主機都進行關閉防火墻、上下文等&#xff0…

中望CAD2026亮點速遞(5):【相似查找】高效自動化識別定位

本文為CAD芯智庫整理&#xff0c;未經允許請勿復制、轉載&#xff01;原文轉自&#xff1a;www.xwzsoft.com/h-nd-594.html CAD的相似查找功能主要應用于需要重復操作、標準化控制、一致性檢查或復雜模式識別的場景&#xff0c;通過圖形相似度算法&#xff0c;快速找到匹配的圖…