我有一个ul列表。在此,有一些li。我要删除所有没有子类linoremove

这是我的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/

08-08 05:06