簡體   English   中英

從JSON創建菜單

[英]Creating a Menu from JSON

我正在嘗試使用jQuery UI創建一個動態菜單。

我將從JSON文件中獲取條目並創建菜單項。在大規模嘗試之前,我決定做一個小演示。這是我的小提琴,它按照我想要的方式工作。 現在,我無法將其與JSON文件一起使用。

工作場所

這是JSON

var JSON = 
    {
       menu: 
          [
             {name: 'Croatia', link: '0', sub: null},
             {name: 'England', link: '1', sub: 
                [
                   {name: 'Arsenal',link: '0-0', sub: null},
                   {name: 'Liverpool',link: '0-1', sub: null},
                   {name: 'Manchester United',link: '0-2', sub: null}
                ]
             },
             {name: 'Spain', link: '2', sub: 
                [
                   {name: 'Barcelona',link: '2-0', sub: null},
                   {name: 'Real Madrid',link: '2-1', sub: null}
                ]
              },        
              {name: 'Germany', link: '3',sub: 
                [
                   {name: 'Bayern Munich',link: '3-1', sub: null},
                   {name: 'Borrusia Dortmund',link: '3-2', sub: null}
                ]
              }
          ]
    }

我如何使用JSON中的值設計我的整個菜單,其中Li類似於以下內容。

<li><a href="#3-2">Borrusia Dortmund</a>
</li>

編輯:這個問題聽起來好像我還沒有嘗試過,但是我已經嘗試過。 它只是我無法理解的JSON部分,Jsfiddle無法正確讀取它。 我想知道我的jSON是否格式不正確。 任何幫助,將不勝感激

只需迭代JSON.menu數組並從中生成菜單(重命名為JSON-> data ...):

$(function () {
    var getMenuItem = function (itemData) {
        var item = $("<li>")
            .append(
        $("<a>", {
            href: '#' + itemData.link,
            html: itemData.name
        }));
        if (itemData.sub) {
            var subList = $("<ul>");
            $.each(itemData.sub, function () {
                subList.append(getMenuItem(this));
            });
            item.append(subList);
        }
        return item;
    };

    var $menu = $("#menu");
    $.each(data.menu, function () {
        $menu.append(
            getMenuItem(this)
        );
    });
    $menu.menu();
});

http://jsfiddle.net/9uhc3/5/

像這樣(遞歸函數):

function parseMenu(ul, menu) {
    for (var i=0;i<menu.length;i++) {
        var li=$(ul).append('<li><a href="'+menu[i].link+'">'+menu[i].name+'</a></li>');
        if (menu[i].sub!=null) {
            var subul=$('<ul id="submenu'+menu[i].link+'"></ul>');
            $(li).append(subul);
            parseMenu($(subul), menu[i].sub);
        }
    }
}

var menu=$('#menu');
parseMenu(menu, JSON.menu);

http://jsfiddle.net/uDTk4/-包括上面的JSON(對象)。

產生的輸出/菜單:

<ul id="menu">
    <li><a href="0">Croatia</a></li>
    <li><a href="1">England</a></li>
    <ul id="submenu1">
        <li><a href="0-0">Arsenal</a></li>
        <li><a href="0-1">Liverpool</a></li>
        <li><a href="0-2">Manchester United</a></li>
    </ul>
    <li><a href="2">Spain</a></li>
    <ul id="submenu2">
        <li><a href="2-0">Barcelona</a></li>
        <li><a href="2-1">Real Madrid</a></li>
    </ul>
    <li><a href="3">Germany</a></li>
    <ul id="submenu3">
        <li><a href="3-1">Bayern Munich</a></li>
        <li><a href="3-2">Borrusia Dortmund</a></li>
    </ul>
</ul>

您的json無效。 正確的json在下面。

{"menu":[
    {"name": "Croatia", "link": "0", "sub": null
    },
    {"name": "England", "link": "1", "sub": [
        {"name": "Arsenal","link": "0-0", "sub": null},
        {"name": "Liverpool","link": "0-1", "sub": null},
        {"name": "Manchester United","link": "0-2", "sub": null}
        ]},
    {"name": "Spain", "link": "2", "sub": [
        {"name": "Barcelona","link": "2-0", "sub": null},
        {"name": "Real Madrid","link": "2-1", "sub": null}
    ]},        
    {"name": "Germany", "link": "3","sub": [
        {"name": "Bayern Munich","link": "3-1", "sub": null},
        {"name": "Borrusia Dortmund","link": "3-2", "sub": null}
        ]}
]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM