1、HTML
<div id="menuBox"></div>
2、JavaScript
mainInit();
function mainInit() {
let data = [
{
id: 5, parentId: 2, name: "目录1-1-1", },
{
id: 1, parentId: 0, name: "目录1", },
{
id: 13, parentId: 9, name: "目录2-2-3", },
{
id: 3, parentId: 1, name: "目录1-2", },
{
id: 2, parentId: 1, name: "目录1-1", },
{
id: 12, parentId: 9, name: "目录2-2-2", },
{
id: 4, parentId: 1, name: "目录1-3", },
{
id: 7, parentId: 0, name: "目录2", },
{
id: 9, parentId: 7, name: "目录2-2", },
{
id: 6, parentId: 2, name: "目录1-1-2", },
{
id: 11, parentId: 9, name: "目录2-2-1", },
{
id: 8, parentId: 7, name: "目录2-1", },
{
id: 10, parentId: 7, name: "目录2-3", },
];
let map = {
};
data.forEach(item => {
map[item.id] = item;
});
const result = [];
data.forEach(item => {
const parent = map[item.parentId];
if (parent) {
parent.children = parent.children || [];
parent.children.push(item);
} else {
result.push(item);
}
});
const root = document.getElementById('menuBox');
createMenu(result, root);
}
function createMenu(data, root) {
if (!data.length) throw new Error('粗错啦');
data.forEach(item => {
const detailsEle = document.createElement('details');
const summaryEle = document.createElement('summary');
const span = document.createElement('span');
span.innerHTML = item.name;
summaryEle.appendChild(span);
detailsEle.appendChild(summaryEle);
root.appendChild(detailsEle);
if (item.children?.length) createMenu(item.children, detailsEle);
});
}
3、CSS
null