2

私はULセットを実行しようとしています:

<ul>
    <li>
        <h2>Header 1</h2>
        <ul class="collapse">
            <li>A</li>
            <li>B</li>
            <li>C</li>
            <li>D</li>
            <li>E</li>
        </ul>
    </li>
    <li>
        <h2>Header 2</h2>
        <ul class="collapse">
            <li>A</li>
            <li>B</li>
            <li>C</li>
            <li>D</li>
            <li>
                <h2>Header 3</h2>
                <ul class="collapse">
                    <li>A</li>
                    <li>B</li>
                    <li>C</li>
                    <li>D</li>
                    <li>
                        <h2>Header 4</h2>
                        <ul class="collapse open">
                            <li>A</li>
                            <li>B</li>
                            <li>C</li>
                            <li>D</li>
                            <li>E</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

クラスを持つ子の1つを見つけた場合、クラスopenを削除したい、collapseおよび/またはopenで見つかったその子より前の親レベルのULから削除したいopen。多分私は疲れているのかもしれませんが、私はこの重大な欠陥のある論理を持っています。頭の中でそれを理解しようとしていますが、同時に論理的ではないと感じており、これを行うためのより簡単な方法があるはずです。($.each()私が現在試みていることには欠陥があり、とにかく機能しないことに注意してください)。しかし、誰かが行った場合にこれにアプローチする方法について、いくつかのアイデアを使用できます。

$('ul').each(function()
{
    if($(':not(:first)', this))
    {
        if($(this).hasClass('collapse'))
        {
            alert('collapse found');
            $kid = $(this).child('ul');

            if($kid.hasClass('open'))
            {
                alert('uh')
                $kid.parents('ul').removeClass('collapse');
            }
        }
    }
});
4

5 に答える 5

2
$('ul.open:has(li.open)').removeClass('open collapse');

クラスを含むすべてULの を検索し、クラス.openを含む が含まれているかどうかを確認します。存在する場合は、とクラスの両方を削除します。LI.openopencollapse

于 2013-03-28T17:20:24.323 に答える
1

top にある種の識別子またはクラスを配置するとul、次のようなことができます。

$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .removeClass('collapse');

編集: デモ用の jsfiddle は次のとおりです: http://jsfiddle.net/vA5Gu/

collapseまた、質問には記載されていませんが、クラスを使用して要素のクラスも削除したい場合がありますopenか? その場合は、addBack()コマンドを追加するだけです。例えば、

$('.collapse .open')
    .parentsUntil('#root', 'ul.collapse')
    .addBack()
    .removeClass('collapse');

ここに示されているもの:http://jsfiddle.net/vA5Gu/1/

于 2013-03-28T17:19:19.040 に答える
0

問題を明確に把握できたかどうかはわかりませんが、これでうまくいくでしょうか?

$('.collapse.open').each(function(){
    $(this).closest('ul.collapse').removeClass('collapse');
});
于 2013-03-28T17:16:59.890 に答える
0
$('.collapse .open').each(function(){
    $(this).parent().removeClass('collapse');
});

これはうまくいくと思います。フィドルでテストする必要があります。

于 2013-03-28T17:17:14.707 に答える
0

試す

$('.collapse.open').each(function(){
    $(this).parents('ul.collapse, ul.open').removeClass('collapse open');
});
于 2013-03-28T17:20:09.120 に答える