递归无法正常工作

时间:2016-03-03 08:45:40

标签: javascript recursion tree treeview metro-ui-css

我在使用某些XML-Data创建TreeView(使用MetroUI)的递归函数时遇到了一些麻烦。在第一个范围中,树的第一个级别按预期创建,但第二个级别未创建。我的XML数据具有以下结构:

<tree>
  <sitenode>
    <name>First Element</name>
    <children>
      <sitenode>
        ...
      </sitenode>
    </children>
  </sitenode>
</tree>

我正在使用的JavaScript代码就是这个:

var tree = $('#dlgEditorCreateNewSiteSelParent').data('treeview');

/* Helper-function for Recursion */
function dlgEditorCreateNewSiteCreateParentTreeViewNodes(nodes, parent) {
  var i, j;
  /* Alle knoten durchlaudfen */
  for (i = 0; i < nodes.length; i++) {

    /* Add leaf */
    var node = tree.addLeaf(parent, $(nodes[i]).find('>name').text());

    /* Children */
    var children = $(nodes[i]).find('children > sitenode');

    for (j = 0; j < children.length; j++) {
      /* REKURSION */
      //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text());
      dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node);
    }
  }
}

var roots = $(result).find('tree > sitenode');
dlgEditorCreateNewSiteCreateParentTreeViewNodes(roots, false);
通过使用Firefox调试代码,似乎第一个处理范围正常运行,但在第二个处理范围内(因此通过处理子代),调试器立即跳转(在递归调用函数之后)到第二个 - 循环,我的大多数变量都是“未定义的”。

我已经搜索了一些类似的问题,但我发现的一切都是关于反变量的范围。

1 个答案:

答案 0 :(得分:0)

  for (j = 0; j < children.length; j++) {
  /* REKURSION */
  //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text());
  dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node);
}

这应该有效,但我不确定..

children.forEach(function(child) {
    dlgEditorCreateNewSiteCreateParentTreeViewNodes(child, this);
}, node);