【发布时间】:2015-07-15 20:56:56
【问题描述】:
我需要从未指定数量的节点数组中为 treeview 创建 html。 这是一个例子
var array = [
{
Description: "G",
Id: 1,
guid: "c8e63b35",
parent: null,
Children: [
{
Description: "Z",
Id: 9,
guid: "b1113b35",
parent: "c8e63b35",
Children: [
{
Description: "F",
Id: 3,
guid: "d2cc2233",
parent: "b1113b35",
}
]
},
]
},
{
Description: "L",
Id: 2,
guid: "a24a3b1a",
parent: null,
Children: [
{
Description: "K",
Id: 4,
guid: "cd3b11caa",
parent: "a24a3b1a",
}
}
]
结果应该是
<ul>
<li id="1" data-guid="c8e63b35">G
<ul>
<li id="9" data-guid="b1113b35">Z
<ul>
<li id="3" data-guid="d2cc2233">F
</li>
</ul>
</li>
</ul>
</li>
<li id="2" data-guid="a24a3b1a">L
<ul>
<li id="4" data-guid="cd3b11caa">K
</li>
</ul>
</li>
</ul>
我编写了递归函数,在这个例子中可以正确生成 html,但在其他情况下,它只能完美地工作到 197 深度。如果嵌套节点超过 197 则抛出异常
"最大调用栈大小"
有没有办法在 JavaScript 中不使用递归函数来做到这一点?
编辑:这是我的递归函数
var _generateHTML = function (array, html) {
for (var i = 0; i < array.length; i++) {
html += "<li id=\"" + array[i].Id + "\" data-guid=\"" + array[i].guid + "\">" + array[i].Description +
"<ul>" + _generateHTML(array[i].Children, "") + "</ul>" +
"</li>";
}
return html;
}
我不能使用外部库,因为这是我的工作。我之前使用递归函数创建了这棵树。我想知道这是否可能仅此而已。
【问题讨论】:
-
嘿!分享您的递归解决方案,以便我们可以从那里轻松构建
-
html 生成代码应该在浏览器中运行并实时生成 HTML?还是应该在服务器中生成 HTML?在哪个平台上?
-
我更正了我的答案。整个 HTML 应该作为字符串生成并传递给 $(selector").html() 函数
-
所以你想把递归输入放到一个非递归函数中?这有什么意义?好吧..您可以通过各种递归方式创建它..节省资源和资源密集型。
-
您使用哪种浏览器?根据消息来源,chrome 将让您进行 10000 次以上的调用,这将成为问题2ality.com/2014/04/call-stack-size.html
标签: javascript html