如何使用递归把一个并不复杂的数据转化成这样的 DOM 结构?

要动态地渲染导航菜单,其中每个对象都对应一个菜单项,菜单项可以有子菜单,子菜单也可以有子子菜单。这样的数组结构如何转化成以下的 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>

我的思路大概是这样的:不限层级、具有相似结构的数据可以用递归实现,但写着写着写到一半做不下去了。 有啥办法在initTree函数的大致框架下把功能实现吗?

<div class='tree'></div>
 
var container = document.querySelector('.tree')
function initTree(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) {
      var childrenNode = document.createElement('div')
      childrenNode.classList.add('tree-children') 
      //...
      initTree(objItem.children)
    }
  }
  
}
阅读 1.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题