如何从给定的json中检索元素
How can I retrieve elements from the given json
我想迭代给定json菜单中的每个数据json是
var jsonMenu = {
"menu": [
{
"MenuId": "ApplicationId",
"MenuName": "Application",
"MenuLink": "#",
"Submenu":
[
{
"MenuId": "BasicInformationId",
"MenuName": "Basic Information",
"MenuLink": "#"
}
]
},
{
"MenuId": "ReviewandSubmissionID",
"MenuName": "Review and Submission",
"MenuLink": "#"
}
]
}
我使用了给定的代码来迭代主菜单,它是
$.each(jsonMenu, function (key3, value3) {
$('<li id="' + value3.MenuId + '" class="menu-li"><span><img src="../Images/tab_arrow.png"/></span><a href="' + value3.MenuLink + '">' + value3.MenuName + '</a></li>').appendTo("#menuLeft");
});
但是如何从给定的json中检索子菜单呢?
您应该在当前循环中使用另一个循环:
$.each(jsonMenu.menu, function (key, value) {
var $li = $('<li id="' + value.MenuId + '" class="menu-li"><span></span><a href="' + value.MenuLink + '">' + value.MenuName + '</a></li>');
if (value.Submenu) {
var $ul = $('<ul/>').appendTo($li);
$.each(value.Submenu, function (_, v) {
$ul.append('<li><a href="#">' + v.MenuName + '</a>...</li>');
});
}
$li.appendTo("#menu");
});
http://jsfiddle.net/7x5En/
为了提高效率,您还可以使用for
循环而不是$.each()
实用程序函数,并且为了避免生成嵌套的空ul
元素(用于空子菜单数组),您可以使用typeof
运算符检查Submenu
属性的存在:
if (typeof value.Submenu !== 'undefined' && value.Submenu.length) { // ... }
这可以从json:创建层次结构
$.each(jsonMenu, function (key3, value3) {
$('<li id="' + value3.MenuId + '" class="menu-li"><span><img src="../Images/tab_arrow.png"/></span><a href="' + value3.MenuLink + '">' + value3.MenuName + '</a></li>').appendTo("#menuLeft");
$('<ul></ul>').appendTo("#" + value3.MenuId);
$.each(value3, function (key, value) {
$('<li id="' + value.MenuId + '" class="menu-li"><span><img src="../Images/tab_arrow.png"/></span><a href="' + value.MenuLink + '">' + value.MenuName + '</a></li>').appendTo("#" + value3.MenuId + ' ul');
});
});
Fiddle:http://jsfiddle.net/XVL69/
老实说,您可能应该为此使用模板框架。Mustache非常简单,重量也很轻。您甚至可以通过递归引用子菜单模板来处理任意深度的"子菜单"树。
但是,本着直接回答您问题的精神,我会制作一个函数,将您的子菜单添加到父菜单中。以及一个创建链接的函数。不是重复所有的代码,你知道吗?像这样:
function makeChildren(parentMenu){
var html = $('<ul></ul>');
var children = 'menu' in parentMenu ? 'menu' : 'Submenu';
if (typeof parentMenu[children] === 'undefined' ||
!parentMenu[children].length) {
return html;
}
$.each(parentMenu[children], function(key, val){
html.append($('<li><span><img alt="use css"/></span></li>')
.attr('id', val.MenuId)
.addClass('menu-li')
.append(makeLink(val))
.append(makeChildren(val))
);
});
return html;
}
function makeLink(menu){
return $('<a></a>')
.attr('href', menu.MenuLink)
.text(menu.MenuName);
}
如果你想玩的话,这里有一把工作小提琴。你基本上在你的jsonMenu上调用makeChildren:
http://jsfiddle.net/VLwjV/
相关文章:
- 如何使用Angular.js在页面上显示从JSON检索到的图像
- JSON检索中选择框的额外未定义选项
- 使用JSON检索PHP数组,并使用javascript中的数组来填充播放列表
- 如何使用JSON检索OpenWeatherMap数据
- 使用数组从 json 检索数据
- 通过 json 检索动态数据
- 不从移动角度UI中的JSON检索图像.(角度 js)
- 从 JSON 检索数据时 HTML 图像未正确对齐
- 将JSON检索到的图像URL放置在<李>标签
- 如何在php中使用json检索图像
- 从URL JSON检索数据
- 嵌套Json检索
- 如何存储从JSON检索到的值
- 在Angular Service中基于另一个JSON检索JSON
- 在javascript中使用json检索的数据时遇到问题,无法对数组进行排序
- 根据通过json检索到的值,在jqGrid中添加复选框
- 将值从嵌套的 JSON 检索到 ng-repeat
- 使用 JavaScript Ajax JSON 检索 PHP 数组时出错
- 从 JSON 检索嵌套数据时出现问题
- d3.json()支持身份验证吗?如果没有,还有哪些其他JavaScript选项可用于JSON检索