您不需要 jQuery,但您的对象结构似乎很奇怪。
以与嵌套在 DOM 结果中相同的方式将子菜单嵌套在对象结构中会更有意义。
var myArray = [];
function Obj(MenuText, stuff, someStuff) {
this.text = MenuText;
this.stuff = stuff;
this.someStuff = someStuff;
}
myArray[0] = new Obj('MenuText', 'A', 'F');
myArray[0].submenu = new Obj('Submenu Option', 'A', 'F');
myArray[1] = new Obj('MenuText2', 'A', 'F');
myArray[1].submenu = new Obj('Submenu Option', 'A', 'F');
然后创建一个迭代数组的递归函数,并在找到子菜单时进行递归调用。
function makeMenu(menu, parent) {
var li = parent.appendChild(document.createElement("li"));
li.appendChild(document.createTextNode(menu.text));
if (menu.submenu)
makeMenu(menu.submenu, li.appendChild(document.createElement("ul")));
}
var container = document.body.appendChild(document.createElement("ul"));
for (var i = 0; i < myArray.length; i++)
makeMenu(myArray[i], container);
这假设您在一个菜单下不会有多个子菜单。这似乎不太可能。
如果一个菜单下实际上可能有多个子菜单,那么您将创建一个子菜单数组。
function Obj(MenuText, stuff, someStuff) {
this.text = MenuText;
this.stuff = stuff;
this.someStuff = someStuff;
this.submenus = []; // holds the sub menus
}
myArray[0] = new Obj('MenuText', 'A', 'F');
myArray[0].submenus.push(new Obj('Submenu Option', 'A', 'F'));
myArray[1] = new Obj('MenuText2', 'A', 'F');
myArray[1].submenus.push(new Obj('Submenu Option', 'A', 'F'));
并稍微更改一下代码。
function makeMenus(menus, parent) {
for (var i = 0; i < menus.length; i++) {
var li = parent.appendChild(document.createElement("li"));
li.appendChild(document.createTextNode(menus[i].text));
makeMenus(menus[i].submenus, li.appendChild(document.createElement("ul")));
}
}
makeMenus(myArray, document.body.appendChild(document.createElement("ul")));
这种结构比您现有的结构更自然。