【问题标题】:loop through multidimensional UL to generate javascript array循环遍历多维UL生成javascript数组
【发布时间】:2018-01-23 10:07:06
【问题描述】:

简而言之,我想将 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 直到它返回 false 来拥有任何孩子 ul/li。

【问题讨论】:

  • 请为您的标记添加预期的输出。
  • 这是我的问题,UL 大小和嵌套深度可以是任何值。输出数组需要动态匹配 UL 的嵌套格式。

标签: javascript jquery html arrays loops


【解决方案1】:

实现你想要的最好方法是通过递归:

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>

【讨论】:

  • 这就是我想要的!奇迹般有效!谢谢你!
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多