Creating a Menu from JSON

后端 未结 3 1617
广开言路
广开言路 2020-12-09 23:55

I am trying to create a dynamic menu using jQuery UI.

I will be fetching entries from a JSON file and creating my menu items.I decided to do a small demo before i tr

相关标签:
3条回答
  • 2020-12-10 00:47

    Just iterate your JSON.menu array and generate the menu from it (renamed 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/

    0 讨论(0)
  • 2020-12-10 00:47

    Like this (recursive function) :

    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/ - including the JSON (object) from above.

    Produced output / menu :

    <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>
    
    0 讨论(0)
  • 2020-12-10 00:47

    Your json is invalid. Correct json is below.

    {"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}
            ]}
    ]}
    
    0 讨论(0)
提交回复
热议问题