json嵌套无序列表

Har*_*ram 1 html jquery json html-lists

我试图将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\"]]]}";
Run Code Online (Sandbox Code Playgroud)

预期的产出是

<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>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题!

干杯,

msc*_*ock 5

这正是您所需要的:

使用jQuery模板API.这曾经是jQuery的一部分,但目前仅作为插件提供.但是,我认为jQuery很快就会采用这种或类似的技术.

http://api.jquery.com/category/plugins/templates/

它超级易用:

$.tmpl("template", jsonObject)
Run Code Online (Sandbox Code Playgroud)

这是一个小的基本模板示例:

$.tmpl(
    "<li><b>${Id}</b>${Name}</li>", 
    [{Id:1, Name:"Werner"}, {Id:2, Name:"Klaus"}]
);
Run Code Online (Sandbox Code Playgroud)

这将导致以下jQuery HTML元素可以附加到任何地方:

  • 1 Werner
  • 2克劳斯
  • 对于复杂数据,您还可以使用"{{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));
    
    Run Code Online (Sandbox Code Playgroud)

    浏览器结果:

    • 导向器
      • Exe Director1
      • Exe Director2
      • Exe Director3
        • Sub Director3_1
        • Sub Director3_2
        • Sub Director3_3
        • ...

    这可以通过包含嵌套模板来调整以支持完整递归......但我是一个懒惰的家伙,剩下的就是为你做的.

    欢呼,意志