谁能帮我将以下 JSON 创建到以下 HTML 中?
我在递归方面很糟糕,甚至都不好笑。我在 SO 上找不到任何可以帮助我的东西,你会通过我的jsFiddle看到我有多好!
我试图把这个:
var data = [
{
"node_id":1,
"children":[]
},
{
"node_id":2,
"children":[]
},
{
"node_id":3,
"children":[
{
"node_id":4,
"children":[]
},
{
"node_id":5,
"children":[
{
"node_id":6,
"children":[]
},
{
"node_id":7,
"children":[]
}
]
}
]
}
];
进入这个:
<ul>
<li>1
<ul>
<li>2
<ul>
<li>3
<ul>
<li>4</li>
<li>5
<ul>
<li>6</li>
<li>7</li>
</ul>
</li>
</ul>
</li>
</ul>
</ul>
</li>
</ul>
这是我在完成一些 SO 问题后的最佳尝试(参见我的 jsFiddle )。我对递归感到很困惑:
更新:我越来越近了,但这太复杂了。似乎如果我做了一个 document.createElement 并附加了孩子它可能会更好?
function recursion(data, is_child, first_call) {
if (is_child != true) {
var output = '<ul id="org">\n';
}
else if (is_child == true && first_call == true) {
var output = '<ul>\n';
}
var len = data.length;
for (var i = 0; i < len; i++)
{
if (is_child == true && first_call == true) {
output += '<li>'+ data[i].node_id +'</li>\n';
} else {
output += '<li>'+ data[i].node_id +'\n';
}
if (data[i].children.length > 0) {
if (is_child == true && first_call != true) {
first_call = true
} else {
first_call = false
}
output += recursion(data[i].children, true, first_call);
}
else {
if (is_child == true && first_call != true) {
output += '</li>';
}
if (typeof data[i+1] != 'undefined') {
output += '<ul>\n';
} else {
// Close all the items that are not closed
for (var j = 0; j < i; j++) {
output += '</li></ul>\n'
}
output += '</li>\n'
}
}
}
output += '</ul>\n';
return output;
}
更新:如果节点有子节点,处理节点的方式似乎有不同的行为。我有这张图片向您展示它为这个插件jOrgChart正确呈现: