查找嵌套列表的JavaScript递归解析?

查找嵌套列表的JavaScript递归解析?,javascript,recursion,Javascript,Recursion,我有这个问题,我需要找到嵌套列表 <ul> <li>A <ul> <li>B <ul> <li>C <ul> <li>D</li> <ul> <li>E</li>

我有这个问题,我需要找到嵌套列表

<ul>
  <li>A
    <ul>
      <li>B
        <ul>
          <li>C
            <ul>
              <li>D</li>
              <ul>
                <li>E</li>
              </ul>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
然后,上面的操作会触发函数更深入,这就是我遇到问题的地方,因为我试图调用函数本身,但随后会失去跟踪/调用堆栈。与使用辅助函数相同

我知道有一个序列化数组方法,假设每行有一个输入

我不知道我是否想自己去解决它,我只是觉得自己很傻,因为我无法解决它,就像我无法克服的砖墙一样

我简单地读了一下,看到了一些关于蹦床的东西,听起来就像我试图做的那样,跟踪当前的深度/值,然后用这些值倒退,并将各个部分连接在一起

这是一个简单的例子,在我处理的特定应用程序中,每个组都可能有输入/其他类型的值,我需要获取这些值,但我没有遇到嵌套的问题


任何提示/阅读材料都会有所帮助。我最终会弄明白的,我想哈哈,谢天谢地,现在还没有解决这个问题。

你不需要递归。DOM已经按深度优先顺序列出了元素,因此使用选择器(在
li
elements上)将以正确的顺序返回这些元素

剩下的就是检索它们的文本内容并连接结果

以下是ES3 jQuery代码和普通ES6的解决方案:

//普通ES6
var result=Array.from(document.querySelectorAll('li'),li=>
[…li.childNodes].filter(node=>node.nodeType==3)
.map(node=>node.nodeValue.trim()).join(“”)
)。加入(‘,’);
控制台日志(结果);
//jQuery&ES3
变量结果=$.map($('li'),函数(li){
返回$.map($(li).contents().filter(函数(){
返回this.nodeType==3;
}),函数(节点){
返回node.nodeValue.trim();
}).加入(“”)
})。加入(‘,’);
控制台日志(结果)

  • A
    • B
      • C
        • D
          • E

您是否考虑过将所有HTML作为字符串,删除所有标记,然后将其格式化为您需要的格式?能否显示您尝试的功能我不确定,但我相信DOM不应该是这样。li元素应该只有text或UL元素,而不是both@Shard哇,这是一个直截了当的方法,哈哈,飞到了美沙酮上空。例如,我必须运行它/理解它。我不反对按顺序返回列表。我不明白它是如何跟踪可能有uls的uls的内部。。。但同样是命令。我确实想找出一种递归方法,但我想我会在自己的时间内完成,这种方法解决了问题/更简单。不必要时不要使事情复杂化;-)谢谢,这是一个很好的观点,当意识到其他选择时,这会更好。我想,时间会告诉我,我是否在某个地方全职工作,以及我的工作能维持多久。谢谢你抽出时间。这个例子从实际的事情中被超级简化了,但这清楚地指出了我思维中的一个缺陷(或者说缺乏理解)。
if (jQuery(inpLine).is('ul')) {
  // note the depth and that this has ul, return as object
}