我正在尝试将JSON转换为jQuery中的无序列表。这是我的JSON数据。
var myJSON = "{name:\"Director\",children:[name:\"Exe Director1\",name:\"Exe Director2\",name:\"Exe Director3\",children:[name:\"Sub Director1\",name:\"Sub Director2\",name:\"Sub Director3\",children:[name:\"Cameraman 1\",name:\"Cameraman 2\"]]]}";
预期输出为
<ul>
<li>Director
<ul>
<li>Exe Director 1</li>
<li>Exe Director 2</li>
<li>Exe Director 3
<ul>
<li>Sub Director 1</li>
<li>Sub Director 2</li>
<li>Sub Director 3
<ul>
<li>Cameraman 1</li>
<li>Cameraman 2</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
我该怎么做呢!
干杯,
答案 0 :(得分:5)
这正是您所需要的:
使用jQuery模板API。这曾经是jQuery的一部分,但目前仅作为插件提供。但是,我认为jQuery很快就会采用这种或类似的技术。
http://api.jquery.com/category/plugins/templates/
它超级易用:
$.tmpl("template", jsonObject)
这是一个小的基本模板示例:
$.tmpl(
"<li><b>${Id}</b>${Name}</li>",
[{Id:1, Name:"Werner"}, {Id:2, Name:"Klaus"}]
);
这将导致以下jQuery HTML元素可以附加到任何地方:
对于复杂数据,您还可以使用“{{each}}”模板表示法迭代JSON子对象。这里是您的数据和模板的代码:
var data = {name:"Director",children:[{name:"Exe Director1"},{name:"Exe Director2"},{name:"Exe Director3", children:[{name:"Sub Director3_1"},{name:"Sub Director3_2"},{name:"Sub Director3_3",children:[{name:"Cameraman3_3_1"},{name:"Cameraman3_3_2"}]}]}]};
var template = '\
<ul>\
<li>${name}\
<ul>\
{{each(childindex, child) children}}\
<li>${child.name}\
<ul>\
{{each(child2index, child2) child.children}}\
<li>${child2.name}</li>\
{{/each}}\
</ul>\
</li>\
{{/each}}\
</ul>\
</li>\
</ul>\
';
$('body').empty().append($.tmpl(template, data));
浏览器结果:
这可以通过包含嵌套模板来调整以支持完整递归......但我是一个懒惰的家伙,剩下的就是为你做的。
欢呼声, 将
答案 1 :(得分:1)
您可以使用递归函数,如下所示。每次调用该函数时,它都会返回一个&#34; UL&#34;以及它的子&#34; LI&#34;。
function generateMenu(data) {
var ul = $("<ul>");
$(data).each(function (i, dir) {
var li = $('<li>' + dir.name + '</li>');
ul.append(li);
if (dir.children != null && dir.children.length > 0) {
li.append(generateMenu(dir.children));
}
});
return ul;
};
将其用作:
$("#some-div").append(generateMenu(myJsonData));
Json是,
var myJsonData = JSON.parse('{"name": "Director","children": [{ "name": "Exe Director1" },{ "name": "Exe Director2" },{"name": "Exe Director3","children": [{ "name": "Sub Director1" },{ "name": "Sub Director2" },{"name": "Sub Director3","children": [{ "name": "Cameraman 1" },{ "name": "Cameraman 2" }]}]}]}');