递归调用生成多级菜单

801 阅读1分钟

思路

变化的只有数据和容器,结构相似,每次更改两者即可,所以设置两个参数放置这两个变化的数据。

第一次把容器是box,数据是arr,传入函数中,生成ul以及li,放置最外层的数据,同时监测数据是否有children这个属性,如果有则把有children的数据和对应的li当作参数,继续调用函数。

然后就是继续重复此过程……直到遍历完所有数据,类似于套娃。(禁止套娃!)

数据

要把这个👇

let arr = [
            {
                name: 'a',
                children: [
                    {
                        name: 'a-1',
                        children: [
                            {
                                name: 'a-1-1',
                                children: [
                                    {
                                        name: 'a-1-1-1'
                                    }
                                ]
                                
                            },
                            {
                                name: 'a-1-2',
                                children: [
                                    {
                                        name: 'a-1-2-1'
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                name: 'b',
                children: [
                    {
                        name: 'b-1'
                    },{
                        name: 'b-2'
                    }
                ]
            },
            {
                name: 'c',

            },
        ]

最终结果

变成这个👇

函数代码

就得用这个👇

function taowa2(data,con){
            let ul = $('<ul/>')
            $.each(data, function (i, item) { 
                let li = $('<li/>').text(item.name)
                if (item.children) {
                    taowa2(item.children,li)
                } 
                ul.append(li)
            });
            con.append(ul)
        }
        taowa2(arr,box)

html里还得放个.box当作容器

最后生成的页面结构