删除所有没有特定类的li

时间:2012-11-14 14:17:53

标签: javascript jquery

我有一个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",也没有该类的任何孩子。

如何创建一个可以执行此操作的脚本?它需要在列表上递归运行,我想不出怎么做?

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

$('li').not('.noremove').remove()