删除所有没有特定类的li

Tro*_*ley 1 javascript jquery

我有一份ul清单.在那里,有一些lis.我要删除所有li,且s 具备带班的孩子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>
Run Code Online (Sandbox Code Playgroud)

脚本运行后,我希望它看起来像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

如您所见,项目3未被删除,因为它有一个子节点class="noremove".但是,项目3.2被删除,因为它没有class="noremove"该类的任何孩子.

我怎样才能创建一个脚本呢?它需要在列表上递归运行,我想不出怎么做?

voi*_*tan 8

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

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

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