更新时间:2022-05-25 02:42:23
您可以使用以下逻辑来实现所需的效果.
You can achieve the effect you're looking for by using the following logic.
在下面的示例中,在某些情况下,我偏爱本机DOM API方法而不是jQuery对应的方法,因为:
In the example below I have favoured Native DOM API methods instead of their jQuery counterparts in a few instances because:
$(this).append('<ul></ul>')
返回$(this)
,而不是新创建的列表.解决方法是添加另一行代码,或者仅使用DOM API this.appendChild($('<ul>')[0])
来返回新创建的列表.还有... $(this).append('<ul></ul>')
returns $(this)
instead of the newly created list. The work around is to add another line of code, or just use the DOM API this.appendChild($('<ul>')[0])
which does return the newly created list. And...
var prev;
$('.menu li').each(function(){
if(/^_/.test(this.textContent) && prev) {
prev.appendChild(this);
} else {
prev = this.appendChild($('<ul>')[0]);
}
}).find('ul:empty').remove();
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<ul class="menu">
<li><a href="#">Menu 1</a></li>
<li><a href="#">_Submenu a</a></li>
<li><a href="#">_Submenu b</a></li>
<li><a href="#">_Submenu c</a></li>
<li><a href="#">Menu 2</a></li>
<li><a href="#">Menu 3</a></li>
<li><a href="#">_Submenu x</a></li>
<li><a href="#">_Submenu y</a></li>
<li><a href="#">Menu 4</a></li>
</ul>
上面的示例产生以下HTML结构:
The example above results in the following HTML structure:
<ul class="menu">
<li><a href="#">Menu 1</a>
<ul>
<li><a href="#">_Submenu a</a></li>
<li><a href="#">_Submenu b</a></li>
<li><a href="#">_Submenu c</a></li>
</ul>
</li>
<li><a href="#">Menu 2</a></li>
<li><a href="#">Menu 3</a>
<ul>
<li><a href="#">_Submenu x</a></li>
<li><a href="#">_Submenu y</a></li>
</ul>
</li>
<li><a href="#">Menu 4</a></li>
</ul>