2012-02-13 17 views
2

jqueryを使用してドロップダウンメニューをアニメーション表示しています。メニュー項目の上にマウスを置くと、メニュー項目の子要素が表示されます。すべてが一つのことを除いて、作品:私は訪問者が ときに親メニュー項目の子を見せたいJQueryドロップダウンメニュー、アクティブなときに子アイテムを表示する方法は?

a)は、現在の子ページ

上の現在の親ページ、または b)の上

"current-menu-parent"と "current-menu-item"というクラスを追加しましたが、それを動作させる方法を理解できません!私は.show()の部分を追加しようとしましたが、うまくいきません。

アイデアはありますか?

jsfiddle:http://jsfiddle.net/ub24N/

コード:

$(function(){ 
    $('#menu-navigatie>li>ul').hide(); 
    $('#menu-navigatie>li').mouseover(function(){ 
     // check that the menu is not currently animated 
     if ($('#menu-navigatie ul:animated').size() == 0) { 
      // create a reference to the active element (this) 
      // so we don't have to keep creating a jQuery object 
      $heading = $(this); 
      // create a reference to visible sibling elements 
      // so we don't have to keep creating a jQuery object 
      $expandedSiblings = $heading.siblings().find('ul:visible'); 
      if ($expandedSiblings.size() > 0) { 
       $expandedSiblings.slideUp(500, function(){ 
        $heading.find('ul').slideDown(500); 
       }); 
      } 
      else { 
       $heading.find('ul').slideDown(1000); 
      } 
     } 
    }); 
}); 

とHTML:

<ul id="menu-navigatie" class="menu"> 
    <li> 
     <a href="#">Item 1</a> 
    </li> 
    <li class="current-menu-parent"> 
     <a href="#">Item 2</a> 

      <ul class="sub-menu"> 
       <li class="current-menu-item"> 
        <a href="#">Item 2a</a> 
       </li> 
       <li> 
        <a href="#">Item 2b</a> 
       </li> 
      </ul> 
    </li> 
</ul>  
+0

htmlを投稿できますか?また、多くの理由から 'length()'が 'size()'よりも好まれています。[read more](http://api.jquery.com/size/) – elclanrs

+0

[jsfiddle](http: /jsfiddle.net/)に関連するhtmlを含めます。 – ggreiner

+0

投稿にHTMLを追加しました –

答えて

1

問題は、あなたがどんなのjQueryを介してナビゲーションを隠していませんです。あなたはjQueryのは、現在の項目のサブナビゲーションを表示したい場合は、このような要素を含むサブナビゲーション上のクラスを確認することができます。

$('#menu-navigatie>li>ul').each(function(){ 
    if($(this).parent().hasClass("current-menu-parent")) 
    { 
     $(this).show(); 
    } else { 
     $(this).hide(); 
    } 
}); 

は、迅速なデモのために、このフィドルを参照してください。

http://jsfiddle.net/jimjeffers/ub24N/1/

更新:

あなたが見出しの兄弟を検索するときに別のサブメニューに、あなたは現在のメニューを無視しなければならないため、現在のメニューを非表示にしたくない場合は:

$expandedSiblings = $heading.siblings().not(".current-menu-parent").find('ul:visible'); 

、あなたは、クラスのためにチェックしたくなるでしょうアウトマウスで:

else { 
    if(!$heading.parent().hasClass("current-menu-parent")) { 
    $heading.find('ul').slideDown(1000); 
    } 
} 

このフィドルを参照してください: http://jsfiddle.net/jimjeffers/ub24N/3/

+0

作品! Jimさん、ありがとう! –

0

が一番下に次の行を追加します。

$('.current-menu-item').parent('.sub-menu').show() 

これは、現在隠されている親サブメニュークラスを表示します。 current-menu-itemを表示するだけではうまくいきません。

+0

これもNodrogに感謝しました。 –

+0

ととてもエレガントな:-) np lars – nodrog

関連する問題