阵列动态菜单逻辑
Array Dynamic Menu Logic?
好的,我要做的是创建一个基于数组的动态菜单第一维度元素将是顶级,第二维度级别将是所述父级的子项,我将如何做到这一点?
$(document).ready(function(e) {
//var maxLevels = 3;//Max Levels Of The List TO Traverse
var nav = new Array();
nav[0] = "Item A";
nav[0][0] = "Item AB";
nav[1] = "Item B";
nav[1][0] = "Item BA";
var menu = "";
nav.forEach(function(e) {
menu += "<li>" + e + "</li>";
});
$('#info').html(menu);
});
声明数组nav
后,您可以使用nav[index]
访问其元素,但不能仅通过声明nav[0][0]
向项0添加第二个维度-在使用它之前,您需要将nav[0]
声明为数组:
nav[0] = [];
nav[0][0] = ...
但是,您可以用数组文字在一个语句中声明所有内容,出于您的目的,我建议使用对象数组:
var nav = [
{ "title" : "Item A",
"submenu" : [ "Item A1", "Item A2" ] },
{ "title" : "Item B",
"submenu" : [ "Item B1", "Item B2", "Item B3"] }
];
如果你想要的输出是这样的:
<ul>
<li>Item A
<ul>
<li>Item A1</li>
<li>Item A2</li>
</ul>
</li>
<li>Item B
<ul>
<li>Item B1</li>
<li>Item B2</li>
<li>Item B3</li>
</ul>
</li>
</ul>
你可以这样做:
var $menu = $("<ul></ul>");
$.each(nav, function(i, val) {
var $item = $("<li></li>").html(val.title),
$sub = $("<ul></ul>");
$.each(val.submenu, function(j, sub) {
$sub.append($("<li></li>").html(sub));
});
$menu.append($item.append($sub));
});
$("body").append($menu);
演示:http://jsfiddle.net/9kRs3/
当然,您可以像在原始代码中那样将菜单构建为字符串,但我选择了边创建边创建元素。
使用上面的对象结构,您可以很容易地添加一些额外的属性来定义单击每个项目时会发生什么。您可以使子菜单阵列中的每个项都具有与顶层相同的对象结构,这样您就可以根据需要嵌套越来越多的层。
您试图构建层次结构的方式将不起作用(正如nnnnnn已经解释的那样)。
你可以尝试这样的东西,它适用于任何级别:
var nav = [{
label: 'Item A',
children: [{
label: 'Item AB',
children: []
}]
}, {
label: 'Item B',
children: [{
label: 'Item BA',
children: []
}]
}];
var menu = [];
(function build(elements) {
menu.push('<ul>');
$.each(elements, function (i, val) {
menu.push('<li>', val.label);
build(val.children);
menu.push('</li>');
});
menu.push('</ul>');
}(nav));
$('#info').html(menu.join(''));
演示:http://jsfiddle.net/jw3zm/
我不确定数组是否是最好的方法。你可以使用数组和对象的组合,这会更容易IMO。这将适用于一个子菜单,但可以扩展。。。http://jsfiddle.net/elclanrs/Tp4KM/
var menu = {
about: ['one', 'two', 'three'],
contact: ['four', 'five']
};
var items = '';
for (var m in menu) {
items +=
'<ul class="menu">' +
'<li><a href="#">' + m + '</a>' +
'<ul>' +
'<li><a href="#">' +
menu[m].join('</a></li><li><a href="#">') +
'</a></li>' +
'</ul>' +
'</li>' +
'</ul>';
}
$('body').append(items);
我使用Yoshi的javascript,在这里你可以看到我的HTML代码。问题是我的网站是空白的,并没有显示列表。我不明白为什么它没有运行,因为代码没有显示错误。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Menu</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
<script src="script.js" type="text/javascript"></script>
</head>
<body>
<div id="info"></div>
</body>
</html>
相关文章:
- 使用JQuery的动态上下文菜单
- 动态填充两个下拉菜单
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- Javascript+动态菜单+当前链接样式(CSS)+基于PHP的网站
- 动态下拉菜单使用JavaScript而不使用数据库
- 具有实体化功能的动态菜单
- 如何在jquery mobile中使用json文件创建动态下拉菜单
- 如何动态创建下拉菜单
- 语义UI动态下拉菜单重新初始化问题
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 在javascript中动态添加一个选择下拉菜单
- '使用文本区域中的字符串动态填充下拉菜单
- 垂直菜单展开不适用于动态内容
- 如何在JavaScript中动态创建下拉菜单列表
- javascript:动态下拉菜单值
- Material Design Lite菜单动态重复
- 下拉菜单动态填充第二个下拉菜单
- 使用Javascript的两个选择菜单动态更新文本输入字段
- 如何在jquery中为n级菜单动态创建ul列表
- 多个下拉菜单动态更改文本表单字段