首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在父LI中添加子级别的JSON菜单。

在父LI中添加子级别的JSON菜单。
EN

Stack Overflow用户
提问于 2015-10-12 12:40:36
回答 2查看 115关注 0票数 0

我做了这个JSON菜单,但是很难把UL子菜单放在它的母公司LI里面--有谁知道我在这里需要调整什么吗?

联署材料:

代码语言:javascript
复制
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">

// lets do some JSON magic and make a menu!
JSON = {
   "menu":[
      {
         "id":"contact",
         "leaf":true,
         "description":"Contact Us",
         "link":"",
         "content":"contactUs.html",
         "cssClass":"static-content",
         "menu":null
      },
      {
         "id":"rules",
         "leaf":false,
         "description":"Sports Betting Rules",
         "link":"",
         "content":"",
         "cssClass":"",
         "menu":[
            {
               "id":"types",
               "leaf":true,
               "description":"Wager Types",
               "link":"",
               "content":"wagerTypes.html",
               "cssClass":"static-content wager-types",
               "menu":null
            },
            {
               "id":"odds",
               "leaf":true,
               "description":"Odds & Lines",
               "link":"",
               "content":"oddsAndLines.html",
               "cssClass":"static-content",
               "menu":null
            },
            {
               "id":"policies",
               "leaf":true,
               "description":"Rules & Policies",
               "link":"",
               "content":"rulesAndPolicies.html",
               "cssClass":"static-content rules-policies",
               "menu":null
            },
            {
               "id":"bonuses",
               "leaf":true,
               "description":"Sports Bonuses",
               "link":"",
               "content":"sportsBonuses.html",
               "cssClass":"static-content",
               "menu":null
            }
         ]
      },
      {
         "id":"conditions",
         "leaf":false,
         "description":"Terms & Conditions",
         "link":"",
         "content":"",
         "cssClass":"",
         "menu":[
            {
               "id":"termsOfService",
               "leaf":true,
               "description":"Terms of Service",
               "link":"",
               "content":"termsOfService.html",
               "cssClass":"static-content",
               "menu":null
            },
            {
               "id":"privacy",
               "leaf":true,
               "description":"Privacy Policy",
               "link":"",
               "content":"privacy.html",
               "cssClass":"static-content",
               "menu":null
            }
         ]
      },
      {
         "id":"view",
         "leaf":true,
         "description":"View in: Mobile | Full Site",
         "link":"",
         "content":"view.html",
         "cssClass":"static-content",
         "menu":null
      }
   ]
}

$(document).ready(function () {

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

    var menu = $(".main-menu");
    buildMenu(menu, JSON.menu);

});

</script>

<div class="main-menu"></div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-12 12:59:27

主要问题在于代码的以下几点:

代码语言:javascript
复制
var li = $(ul).append('<li id="'+menu[i].id+'" class="'+menu[i].leaf+' '+menu[i].cssClass+'"><a href="'+menu[i].link+'">'+menu[i].content+'</a></li>');

append方法返回的是<ul>,而不是您认为的<li>。因此,由于这个原因,代码不能像您想象的那样工作。为了解决这个问题,将代码行分成两部分:

代码语言:javascript
复制
        var li = $('<li id="'+menu[i].id+'" class="'+menu[i].leaf+' '+menu[i].cssClass+'"><a href="'+menu[i].link+'">'+menu[i].content+'</a></li>');
        $(ul).append(li);

这里的完整代码:

代码语言:javascript
复制
var JSON = {
  "menu": [{
    "id": "contact",
    "leaf": true,
    "description": "Contact Us",
    "link": "",
    "content": "contactUs.html",
    "cssClass": "static-content",
    "menu": null
  }, {
    "id": "rules",
    "leaf": false,
    "description": "Sports Betting Rules",
    "link": "",
    "content": "",
    "cssClass": "",
    "menu": [{
      "id": "types",
      "leaf": true,
      "description": "Wager Types",
      "link": "",
      "content": "wagerTypes.html",
      "cssClass": "static-content wager-types",
      "menu": null
    }, {
      "id": "odds",
      "leaf": true,
      "description": "Odds & Lines",
      "link": "",
      "content": "oddsAndLines.html",
      "cssClass": "static-content",
      "menu": null
    }, {
      "id": "policies",
      "leaf": true,
      "description": "Rules & Policies",
      "link": "",
      "content": "rulesAndPolicies.html",
      "cssClass": "static-content rules-policies",
      "menu": null
    }, {
      "id": "bonuses",
      "leaf": true,
      "description": "Sports Bonuses",
      "link": "",
      "content": "sportsBonuses.html",
      "cssClass": "static-content",
      "menu": null
    }]
  }, {
    "id": "conditions",
    "leaf": false,
    "description": "Terms & Conditions",
    "link": "",
    "content": "",
    "cssClass": "",
    "menu": [{
      "id": "termsOfService",
      "leaf": true,
      "description": "Terms of Service",
      "link": "",
      "content": "termsOfService.html",
      "cssClass": "static-content",
      "menu": null
    }, {
      "id": "privacy",
      "leaf": true,
      "description": "Privacy Policy",
      "link": "",
      "content": "privacy.html",
      "cssClass": "static-content",
      "menu": null
    }]
  }, {
    "id": "view",
    "leaf": true,
    "description": "View in: Mobile | Full Site",
    "link": "",
    "content": "view.html",
    "cssClass": "static-content",
    "menu": null
  }]
};

$(document).ready(function() {

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

  var menu = $(".main-menu");
  buildMenu(menu, JSON.menu);

});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="main-menu"></ul>

注意:,我使用<ul class="main-menu"></ul>而不是您的<div class="main-menu"></div>,因为它更正确。

票数 0
EN

Stack Overflow用户

发布于 2015-10-12 12:55:58

代码语言:javascript
复制
function buildMenu(element, menu) {
    $.each(menu,function(key, obj) {
        var li = element.append('<li id="'+obj.id+'" class="'+obj.leaf+' '+obj.cssClass+'"><a href="'+obj.link+'">'+obj.content+'</a></li>');
        if (obj.menu!=null) {
                var subul=$('<ul id="submenu-'+obj.id+'"></ul>');
                $(li).append(subul);
                buildMenu($(subul), obj.menu);
            }
    });
};

$(document).ready(function () {
    var menu = $(".main-menu");
    buildMenu(menu, JSON.menu);
});
代码语言:javascript
复制
<ul class="main-menu">
</ul>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33081418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档