[英]loop through multidimensional UL to generate javascript array
简而言之,我想将UL列表转换为javascript / jquery数组。 我的问题是,UL可以是任意长度和深度的嵌套。
这是UL示例:
<div id="main">
<ul>
<li>
<span>HOME</span>
<ul>
<li><span>Page 1</span></li>
<li><span>Page 2</span></li>
<li>
<span>Page 3</span>
<ul>
<li><span>Page a</span></li>
<li><span>Page b</span></li>
<li><span>Page c</span></li>
<li>
<span>Page X</span>
<ul>
<li><span>Page d</span></li>
<li><span>Page e</span></li>
<li><span>Page f</span></li>
<li><span>Page g</span></li>
</ul>
</li>
</ul>
</li>
<li><span>Page 4</span></li>
</ul>
</li>
</ul>
</div>
我在jquery中有一个基本的each循环,它只经过第一个嵌套。 我需要它来继续遍历所有具有子项的li,并生成与嵌套格式匹配的数组:
var arr = [];
$("#main > ul > li").each(function() {
var elem = {
brand: $(this).find(">span:first").text(),
children: []
};
$(this).find(">ul>li").each(function() {
elem.children.push($(this).find('span:first').text());
});
arr.push(elem);
});
console.log(arr);
它输出的是:
任何帮助将不胜感激。 我感觉到我只需要某种功能,就可以不断循环li的功能,直到因为任何孩子ul / li而返回false为止。
实现所需目标的最佳方法是通过递归:
var list = []; $("#main > ul > li").each(function() { list.push(buildObject($(this))); }); function buildObject(parent){ var obj = { brand: parent.find(">span:first").text(), children: [], } parent.find(">ul>li").each(function() { obj.children.push(buildObject($(this))); }); return obj; } console.log(list);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="main"> <ul> <li> <span>HOME</span> <ul> <li><span>Page 1</span></li> <li><span>Page 2</span></li> <li> <span>Page 3</span> <ul> <li><span>Page a</span></li> <li><span>Page b</span></li> <li><span>Page c</span></li> <li> <span>Page X</span> <ul> <li><span>Page d</span></li> <li><span>Page e</span></li> <li><span>Page f</span></li> <li><span>Page g</span></li> </ul> </li> </ul> </li> <li><span>Page 4</span></li> </ul> </li> </ul> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.