1

我有一个ul清单。在那,有一些lis。我想删除所有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"班级也没有任何孩子。

我怎样才能制作一个可以做到这一点的脚本?它需要在列表上递归运行,我想不出该怎么做?

4

2 回答 2

8

你想找到所有没有 noremove 类的 li,看看他们是否有一个带有 noremove 类的孩子:

$("ul li:not(.noremove)").filter(function(){
    return $(this).find(".noremove").length === 0;
}).remove();

演示:http: //jsfiddle.net/kNvyF/

于 2012-11-14T14:22:48.297 回答
0
$('li').not('.noremove').remove()
于 2012-11-14T14:20:34.970 回答