1

リストがあり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"クラスの子がいないため、アイテム3.2は削除されています。

それを行うスクリプトを作成するにはどうすればよいですか?リスト上で再帰的に実行する必要がありますが、その方法がわかりません。

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 に答える