我有一个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"
,也没有该类的任何孩子。
如何创建一个可以执行此操作的脚本?它需要在列表上递归运行,我想不出怎么做?
答案 0 :(得分:8)
你想找到没有noremove类的所有li,看看他们是否有一个noremove类的孩子:
$("ul li:not(.noremove)").filter(function(){
return $(this).find(".noremove").length === 0;
}).remove();
答案 1 :(得分:0)
$('li').not('.noremove').remove()