JavaScript:使用遞迴構建樹型選單
阿新 • • 發佈:2020-07-25
使用遞迴函式將扁平資料轉為樹型結構,並渲染到頁面
效果圖:
程式碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>遞迴函式處理資料</title> </head> <body> <div class="nav" style="background-color: pink;"> </div> <script> vardata = [ { id: 1, name: '衣服', pid: 0 }, { id: 2, name: '褲子', pid: 0 }, { id: 3, name: '外套', pid: 1 }, { id: 4, name: '短褲', pid: 2 }, { id: 5, name: '風衣', pid: 3 } ] function filterArray(data, parent){ let temp = [] for (let i = 0; i < data.length; i++) {if (data[i].pid === parent) { temp.push(data[i]) data[i].children = filterArray(data, data[i].id) //返回值是一個數組,又賦值給data[i].children } } return temp } let tree=filterArray(data,0) let nav = document.querySelector('.nav'); function setDomTree(data, node) { let ulfor (let i = 0; i < data.length; i++) { ul = document.createElement('ul') let li = document.createElement('li') li.innerHTML = data[i].name node.appendChild(ul) ul.appendChild(li) if (data[i].children.length !== 0) { let element = setDomTree(data[i].children, ul) ul.appendChild(element) } } return ul } setDomTree(tree,nav) </script> </body> </html>