我有一个ul
列表。在此,有一些li
。我要删除所有没有子类li
的noremove
。
这是我的HTML:
<ul>
<li>Item 1</li>
<li>Item 2
<ul>
<li>Item 2.1</li>
<li>Item 2.2</li>
<li>Item 2.3</li>
</ul>
</li>
<li>Item 3
<ul>
<li class="noremove">Item 3.1</li>
<li>Item 3.2</li>
</ul>
</li>
<li class="noremove">Item 4
<ul>
<li>Item 4.1</li>
<li>Item 4.2</li>
</ul>
</li>
<li>Item 5
<ul>
<li>Item 5.1
<ul>
<li class="noremove">Item 5.1.1</li>
</ul>
</li>
</ul>
</li>
</ul>
运行脚本后,我希望它看起来像这样:
<ul>
<li>Item 3
<ul>
<li class="noremove">Item 3.1</li>
</ul>
</li>
<li class="noremove">Item 4</li>
<li>Item 5
<ul>
<li>Item 5.1
<ul>
<li class="noremove">Item 5.1.1</li>
</ul>
</li>
</ul>
</li>
</ul>
如您所见,项目3未被删除,因为它的子节点带有
class="noremove"
。但是,删除了项3.2,因为它没有class="noremove"
或该类的任何子级。我如何制作一个能做到这一点的脚本?它需要在列表上递归运行,我不知道该怎么做?
最佳答案
您想查找所有没有noremove类的li,并查看他们是否有一个属于noremove类的孩子:
$("ul li:not(.noremove)").filter(function(){
return $(this).find(".noremove").length === 0;
}).remove();
演示:http://jsfiddle.net/kNvyF/