查找嵌套列表的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
}