0

ネストされた順序なしリストの次の ul が表示されているかどうかを確認する必要があり、表示されていない場合はその ul が表示されます。

私は使っている:

$('#treemenu1 li a').on('click', function(e) {
    next("ul").is(':hidden').show(300);
    $('#treemenu1 li a').next("ul").is(':visible').hide(300);
});

HTML

<ul id="treemenu1" class="treeview">
    <li><a href="#0">Start</a></li>
    <li><a href="#1">Are your team:</a></li>
    <li class="submenu" id="expandable"><a href="#2">Stakeholder Zen</a>
        <ul class="menu">
            <li><a href="#3">What is a Stakeholder?</a></li>
            <li><a href="#4">Why manage stakeholders?</a></li>
        </ul>
    </li>
    <li class="submenu"><a href="#6">Managing your stakeholders</a>
        <ul class="menu">
            <li><a href="#7">Use four simple steps</a></li>
            <li class="submenu"><a href="#8">Identify your stakeholders</a>
                <ul class="menu">
                    <li><a href="#9">Identification techniques</a></li>
                    <li><a href="#10">Identification tools</a></li>
                </ul>
            </li>
        </ul>
4

3 に答える 3

1

あなたの使い方間違っています。istrue または false を返すため、if ブロックでラップする必要があります。

そしてあなたの最初nextは間違っています

$('#treemenu1 li a').on('click', function(e) {
    var $ul = $(this).next("ul");
    if ($ul.is(':hidden'))
    {
        ($ul.show(300);
    }

    var $ul2 = $('#treemenu1 li a').next("ul");
    if ($ul2.is(':visible'))
    {
      $ul2.hide(300);
    }
});

または、さらに良いことに、既に表示されているかどうかを確認する必要はありません。

$('#treemenu1 li a').on('click', function(e) {
    $(this).next("ul").show(300);
    $('#treemenu1 li a').next("ul").hide(300);
});

またはさらに良いことです(これで、何をしたいのかを示すフィドルを作成しました)

$('#treemenu1 li a').click(function(e) {
    $(this).next("ul").toggle(300);
});
于 2013-10-09T10:32:55.147 に答える
0

これを試して

$(document).ready(function(){
$('#treemenu1 li a').click(function(e) {  
    $('#treemenu1 li a').next("ul:visible").hide(300);
    $(this).next("ul:hidden").show(300);
});
});

JSFIDDLE デモ

于 2013-10-09T10:31:23.183 に答える
0

試す

var $as = $('#treemenu1 li a').on('click', function(e) {
    var $next = $(this).next("ul").toggle(300);
    $as.next("ul:visible").not($next).hide(300);
});

デモ:フィドル

また

var $as = $('#treemenu1 li a').on('click', function(e) {
    var $next = $(this).next("ul");
    $next.filter(':hidden').stop(true, true).show(300);
    $as.next("ul:visible").not($next).stop(true, true).hide(300);
});

デモ:フィドル

于 2013-10-09T10:31:52.047 に答える