Jquery многоуровневый аккордеон с использованием UL - PullRequest
0 голосов
/ 04 марта 2010

Я пытаюсь создать многоуровневый аккордеон, используя вложенный неупорядоченный список.

Что я пытаюсь сделать:

  • Показывать только "активные" ul (другие оставаться скрытым)

  • При наличии вложенного ul - toggle только вложенный ul (2222 -> 2.1)

Полный код здесь: http://pastie.org/852421

JS

$(document).ready(function() {

    $('ul.menu li ul').hide();

    $('ul.menu li a').click(function(e){

        $('ul.menu li a').each(function(i){
            if($(this).next().is("ul") && $(this).next().is(":visible")){
                $(this).next().slideUp("fast");
            }
        });

        var e = $(e.target);                

        if(e.next().is("ul") && e.next().is(":visible")){
            e.next().slideUp("fast");
            } else {
            e.next().slideDown("fast");
        }
    });

});

HTML

<ul class="menu">
    <li><a href="#">11111</a>
        <ul>
            <li><a href="#" id="one">1.1</a></li>
            <li><a href="#" id="one">1.2</a></li>
        </ul>
    </li>
    <li><a href="#">22222</a>
        <ul>
            <li><a href="#">2.1+ (problem)</a>
                <ul>
                    <li><a href="#">2.1.1</a></li>
                    <li><a href="#">2.2.2</a></li>
                </ul>
            </li>
            <li><a href="#">2.2</a></li>
        </ul>
    </li>
    <li><a href="#">33333</a>
        <ul>
            <li><a href="#">3.1</a></li>
            <li><a href="#">3.2</a></li>
        </ul>
    </li>
</ul>

1 Ответ

1 голос
/ 04 марта 2010

просто добавьте класс .active к активному li и затем вызовите с помощью jQuery:

$("ul:has(li.active)").slideDown();

simple;]

Edit:
также я ранее использовал следующее:

$(rootparent+' ul').hide();
$(rootparent+' ul:has(li#active)').show();
$(rootparent+">li:has(a[href*='"+activepage+"'])>ul").show();

(rootparent является верхним ul, activepage активен URI)

...