2017-07-15 12 views
1

を無視するが、これは、ネストのliタグと私のHTMLコードターゲットのみLiと子供

<ul class="nav"> 
<li class="menu"> 
    <ul class="sub_nav"> 
     <li class="sub_menu"></li> 
     <li class="sub_menu"></li> 
    </ul> 
</li> 
<li class="menu"> 
    <ul class="sub_nav"> 
     <li class="sub_menu"></li> 
     <li class="sub_menu"></li> 
    </ul> 
</li> 
</ul> 

どのクラスメニューを持つ唯一のliタグを選択して、クラスsub_menuで子どもたちの選択を解除

jQuery("li.menu :not('li.sub_menu')").click(function(
      jQuery(this).toggleClass("active") 
}) 
+1

は、それはあなたがそれ自体を心配する必要はありセレクタではありません、あなたはおそらく上でクリックすると、DOMを湧き上がっよりクリックイベントによって影響を受けていますsub_menuリスト項目。サブメニュー項目の伝播を停止するか、メニュー項目のクリックイベントのターゲットを確認することができます。 – j08691

+0

@ j08691どうすればいいですか? – hamed

答えて

2

であるあなたは、何かを行うことができますこのように、クリックされた項目がセレクタ要素であるかどうかをチェックします。そうでない場合は、falseを返し、イベントが親にバブルするのを止めます。

$("li.menu").click(function(event) { 
 
    if (event.target !== this) { 
 
    return false; 
 
    } 
 
    $(this).toggleClass("active"); 
 
});
li.menu.active { 
 
    color: red; 
 
} 
 

 
li.sub_menu { 
 
    color: initial; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="nav"> 
 
    <li class="menu"> 
 
    menu 
 
    <ul class="sub_nav"> 
 
     <li class="sub_menu">submenu</li> 
 
     <li class="sub_menu">submenu</li> 
 
    </ul> 
 
    </li> 
 
    <li class="menu"> 
 
    menu 
 
    <ul class="sub_nav"> 
 
     <li class="sub_menu">submenu</li> 
 
     <li class="sub_menu">submenu</li> 
 
    </ul> 
 
    </li> 
 
</ul>

2

シンプルなソリューション:

$(".nav > li").click(function(){ 
    jQuery(this).toggleClass("active") 
}); 

あなたはまだ、私が想像しないが、唯一の親liの子として、他のliノードを選択します問題がある。

0

私はあなたのように、あなたのCSSを経由してサブメニューのデフォルトの色を定義する必要がありますと思う:

.menu, .sub_nav, .active .sub_nav{ 
    color: #555; 
} 

そしてだけ.navの直接の子にアクティブなクラスを適用します。

それと、@ H77のJSコード(clickイベントをトップレベルのliにターゲティングする)を組み合わせることは、このトリックを行うべきです。

デモは、以下を参照してください:

$(function() { 
 
    $(".nav > li.menu").click(function() { 
 
    if (event.target !== this) { 
 
     return false; 
 
    } 
 

 
    $(this).toggleClass("active"); 
 
    }); 
 
});
li.active.menu { 
 
    color: red; 
 
} 
 

 
.menu, 
 
.sub_nav, 
 
.active .sub_nav { 
 
    color: #555; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="nav"> 
 
    <li class="menu"> 
 
    menu 
 
    <ul class="sub_nav"> 
 
     <li class="sub_menu">submenu</li> 
 
     <li class="sub_menu">submenu</li> 
 
    </ul> 
 
    </li> 
 
    <li class="menu"> 
 
    menu 
 
    <ul class="sub_nav"> 
 
     <li class="sub_menu">submenu</li> 
 
     <li class="sub_menu">submenu</li> 
 
    </ul> 
 
    </li> 
 
</ul>

関連する問題