【发布时间】:2011-12-21 23:51:17
【问题描述】:
我有一个这样的 HTML:
<h2>H2 A</h2>
<h3>H3 A</h3>
<h3>H3 B</h3>
<h2>H2 B</h2>
<h3>H3 C</h3>
<h3>H3 D</h3>
我正在尝试迭代(例如:)一组 H2:找到所有 H3 UNDER H2;然后转到下一个 H2 并执行相同的操作。但我想(可能)递归地做到这一点,并且一般适用于所有标题(即 H+level 和 H+level+1;h3 和 h4、h4 和 h5,等等)。但是到现在我还没有成功。
我的代码如下,我认为使用 nextUntil 可以完成这项工作,但它会使 each 迭代所有元素:
function renderHeadingStructure(level, parent)
{
$('h'+level)/*.nextUntil('h'+level).*/each(function(i,el){
// Copy item name to parent in list - now it is missing creating of an UL :- /
li = document.createElement('li');
li.innerHTML = el.innerHTML;
parent.appendChild(li);
// Here would be handy something like:
// -> If crossed over H+level-1 (while going trough H+level)
// -> then create an ul, recurse and then break
if(level<6)
renderHeadingStructure(level+1,li);
});
}
结果结构应该是这样的:
<ul>
<li><a>H2 A</a>
<ul>
<li><a>H3 A</a></li>
<li><a>H3 B</a></li>
</ul>
</li>
<li><a>H2 B</a>
<ul>
<li><a>H3 C</a></li>
<li><a>H3 D</a></li>
</ul>
</li>
</ul>
上面代码的结果是:第一个 H2 和所有四个 H3,然后是第二个 H2 和所有四个 H3 - 都在相等的 li。
有人可以给我建议或帮助解决问题吗? 谢谢你
【问题讨论】:
-
这将是一个很好的面试问题