1

メニューには次のような構造があります。

<ul id="accordion">
 <li><a href="#">Books</a>
  <ul>
    <li><a href="thrillers.html">Thrillers</a></li>
    <li><a href="scifi.html">Sci-fi</a></li>
    <li><a href="nf.html">Non-fiction</a></li>
  </ul>
 </li>
 <li><a href="#">Games</a>
  <ul>
    <li><a href="rpg.html">RPG</a></li>
    <li><a href="sim.html">Simulations</a></li>
    <li><a href="action.html">Action</a></li>
  </ul>
 </li>
</ul>

(等。)

さて、私たちは「RPG」をクリックして、RPG ページでゲームのサブメニューを開きたいと思います。そこで、選択した LI にクラスを追加することにしました。

...
<ul>
  <li class="active"><a href="rpg.html">RPG</a></li>
  <li><a href="sim.html">Simulations</a></li>
  <li><a href="action.html">Action</a></li>
</ul>
...

今、私がやろうとしているのは、jQuery に class="active" で UL を見つけさせ、その UL を開くことです。

私はこのjQueryだけです:

<script>

$(document).ready(function () {

    //hide all submenu's onLoad
    $('#accordion li').children('ul').slideUp('fast');  

    $('#accordion a.item').click(function () {

        /* FIRST SECTION */

        //slideup or hide all the Submenu
        $('#accordion li').children('ul').slideUp('fast');  

        //remove all the "Over" class, so that the arrow reset to default
        $('#accordion a.item').each(function () {
            if ($(this).attr('rel')!='') {
                $(this).removeClass($(this).attr('rel') + 'Over');  
            }
        });

        /* SECOND SECTION */        

        //show the selected submenu
        $(this).siblings('ul').slideDown('fast');

        //add "Over" class, so that the arrow pointing down
        $(this).addClass($(this).attr('rel') + 'Over');         

        return false;

    });

});

</script>

開きたいものだけを onLoad 部分の後に持つには何が必要ですか?

4

2 に答える 2

2

これは役立つかもしれません:

$('#accordion > li > ul > li.active').parent().slideDown('fast');
于 2013-05-06T06:13:37.233 に答える
2

直接の子を>アクティブにするようにしてください:

$(document).ready(function () {
    $('#accordion li').children('ul').slideUp('fast'); //<--hide all child uls
    $('#accordion > li').click(function () { ///<---perform a click event on li
        $(this).addClass('active').siblings('li').removeClass('active'); //<--add active class to the clicked element and remove from other siblings li
        $(this).siblings('li').find('ul').slideUp('fast'); // <---find the ul in the siblings and slide those up
        $('> ul', this).slideDown('fast'); // <--then perform the slideDown
    });
});

FIDDLE DEMOこれを試すことができます。

于 2013-05-06T06:29:43.440 に答える