Javascript 删除所有没有特定类的li

Javascript 删除所有没有特定类的li,javascript,jquery,Javascript,Jquery,我有一份保险单。在这里面,有一些lis。我想删除所有没有noremove类子级的lis 这是我的HTML: <ul> <li>Item 1</li> <li>Item 2 <ul> <li>Item 2.1</li> <li>Item 2.2</li> <li>Item 2.

我有一份保险单。在这里面,有一些lis。我想删除所有没有noremove类子级的lis

这是我的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类的子级:

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

演示:

您想找到所有没有noremove类的li,看看他们是否有noremove类的子级:

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

演示:

不起作用。它不会进行递归检查,因此只剩下第4项,因为它是唯一具有“noremove”的父节点。如果您已经测试了它,并将其与我想要的输出进行了比较,您可能已经看到了这一点。这将删除所有列表项,只保留三个具有该类的列表项,并且OP希望使用该类维护列表项的父项。不起作用。它不会进行递归检查,因此只剩下第4项,因为它是唯一具有“noremove”的父节点。如果您已经测试了它,并将其与我想要的输出进行了比较,您可能已经看到了这一点。这将删除所有列表项,只有三个具有该类,OP希望使用该类维护列表项的父项。是否可以调整代码,以便不删除.noremove的子项?因此,第4.1项和第4.2项没有被删除,我知道它们在我的示例中,但我改变了主意。我还没有真正测试过它,但类似于:应该这样做。是否可以调整代码,这样就不会删除.noremove的子项?所以第4.1项和第4.2项并没有被删除,我知道它们在我的示例中,但我改变了主意。我还没有真正测试过它,而是类似于:应该这样做。