2016-08-18 5 views
-1

結果は、私がときはなぜ異なる

function intDropDownMobile() { 
    $('.menu-item-has-children').click(function() { 
     // e.preventDefault(); 
     var subMenus = $(this).siblings(); 
     var subMenuItems = $('.menu-mobile .sub-menu'); 

     $(this).children('.menu-mobile .sub-menu').slideToggle(300); 
     if (subMenus.children('.menu-mobile .sub-menu').is(':visible')); { 
      subMenus.children('.menu-mobile .sub-menu').hide(300); 
     } 
    }); 
} 

この

// Te submenu 
    function intDropDownMobile() { 
    $('.menu-item-has-children').click(function() { 
     // e.preventDefault(); 
     var subMenus = $(this).siblings(); 
     var subMenuItems = $('.menu-mobile .sub-menu'); 

     $(this).children(subMenuItems).slideToggle(300); 
     if (subMenus.children(subMenuItems).is(':visible')); { 
      subMenus.children(subMenuItems).hide(300); 
     } 
    }); 
} 

人とも異なった結果を得るのですか、なぜ私が思っていたのWordpress

のためのJSを持つ単純なドロップダウンメニューを構築しています2つ目のオプションでは異なる動作をして、すべてのメニューを非表示にして、サブメニュー以外の項目を表示すると、なぜこれが起こるのだろうと不思議に思っていました。

おかげ

+3

'$(this).find( 'サブメニュー')'は意味がありません。 –

+0

彼らは異なることをしているのですか? 1つは1つの項目のセットを処理し、もう1つは異なる項目のセットを処理しています。 – vlaz

+4

また、どちらの場合でも 'if'文の後に'; 'があるため、' if'文は無用です。 – vlaz

答えて

1
  1. はそのセレクタsub-menuで容疑者に見えるの両方が、おそらくあなたが$(this)の子供をフィルタリングするsubMenuItemsを使用している、2番目の例では.sub-menu.接頭辞)

  2. にする必要がありますが、 subMenuItemsは、私が上で指摘した問題のためにおそらく要素を含まないことになるでしょう。したがって、$(this).children(subMenuItems).にも要素は含まれません。

- EDIT -

これはあなたの最初の例からである:children()機能を使用する場合

var subMenuItems = $('.menu-mobile .sub-menu'); 

    $(this).children('.menu-mobile .sub-menu').slideToggle(300); 

私は論理的に、このセレクタが働くことができるとは思いません。セレクタにはスペースがあるため、結果は2つのレベルの階層(クラスmenu-mobileの要素、およびそれぞれのサブ要素はクラスsub-menu)です。結果は2つのレベルにわたっているので、内側(つまり、外側)が「子」として戻る関数にはあいまいです。だから誰も返されない!

これがあなたの第二の例からである。この例では

var subMenuItems = $('.menu-mobile .sub-menu'); 

    $(this).children(subMenuItems).slideToggle(300); 

subMenuItems内のすべての要素は、クラスsub-menuを持つことになります。それらのうちのいくつかは$(this)の子であり、それらが返されます。

したがって、2番目の例では、文書内の$('.menu-mobile .sub-menu')に一致するすべての要素を選択し、$(this)の子にフィルタリングしました。しかし、最初は、決してうまくいかないセレクターを与えました。

+0

間違いがあったので質問を編集しましたが、まだ別の結果が表示されます – Akarob

+0

上記の編集を参照してください。これが理にかなってほしい。それはトリッキーでした! –

+0

私はあなたの答えを控えめにしてくれました。それは私の助けになりましたが、まだ最初のものがうまく動作するように違いはありません。 'var subMenuItems = $( 'sub-menu'); $(this).children( '。sub-menu')。slideToggle(300);そしてこれは異なる動作をします。var subMenuItems = $( '。 $(this).children(subMenuItems).slideToggle(300); ' – Akarob

関連する問題