我有一个类别列表,每个类别都有一个children
类别数组,这些类别本身可以包含children
。我正在尝试创建一个类别列表,每个类别还包含一个子列表。
我的HTML只是顶级列表的容器:
<ul id="categories"></ul>
然后我有以下Javascript:
function addCategories($list, cats) {
$.each(cats, function(i, cat) {
$item = $('<li><a href="#">' + cat.name + '</a></li>');
if(cat.children.length) {
$subList = $('<ul></ul>');
$item.append($subList);
addCategories($subList, cat.children);
}
$list.append($item);
});
}
var categories = [
{
"name": "Category 1",
"children": []
},
{
"name": "Category 2",
"children": [
{
"name": "Subcategory 2",
"children": [
{
"name": "Subsubcategory 2",
"children": []
}
]
}
]
},
{
"name": "Category 3",
"children":[]
}
];
$(function() {
addCategories($('#categories'), categories);
});
我希望看到的是:
<ul id="categories">
<li>
<a href="#">Category 1</a>
</li>
<li>
<a href="#">Category 2</a>
<ul>
<li>
<a href="#">Subcategory 2</a>
<ul>
<li>
<a href="#">Subsubcategory 2</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">Category 3</a>
</li>
</ul>
然而,相反,我看到了:
<ul id="categories">
<li>
<a href="#">Category 1</a>
</li>
<li>
<a href="#">Subsubcategory 2</a>
</li>
<li>
<a href="#">Category 3</a>
</li>
</ul>
这是一个小提琴:http://jsfiddle.net/qacf2mn6/
我做错了什么?
答案 0 :(得分:2)
想出来。我错过了var
声明,所以它没有重置变量。
这里是正确的js代码:
function addCategories($list, cats) {
_.each(cats, function(cat) {
var $item = $('<li><a href="#">' + cat.name + '</a></li>');
if(cat.children.length) {
var $subList = $('<ul></ul>');
$item.append($subList);
addCategories($subList, cat.children);
}
$list.append($item);
});
}