要动态地渲染导航菜单,其中每个对象都对应一个菜单项,菜单项可以有子菜单,子菜单也可以有子子菜单。这样的数组结构如何转化成以下的 DOM 结构:
var data = [
{title: 'menu 1'},
{
title: 'menu 2',
children: [
title: 'menu 2-1'
children: [
//
]
]
}
]
<div class='tree'>
<div class='tree-node'>
<span class='node-title'></span>
</div>
<div class='node-children'>
<div class='tree-node'>
...
</div>
</div>
</div>
我的思路大概是这样的,不限层级、具有相似结构的数据可以用递归实现,但写着写着写到一半做不下去了。 有啥办法在 populateMenu 函数的大致框架下把功能实现吗?更好的做法是什么?有时候代码写到一半才发现不对劲,怎么避免这种情况呢?
<div class='menu'></div>
var container = document.querySelector('.menu')
function populateMenu(tree) {
for(var i = 0; i <tree.length; i) {
var objItem = tree[i] //取出每一个对象
var node = document.createElement('div')
node.classList.add('tree-node')
//...
if(objItem.children) {
populateMenu(objItem.children)
}
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.