このメニューを作成していますが、親とその子を除外する際に問題が発生しています。余分なクラスなしでこれを解決したいと思っています。
したがって、動作することを想定している方法は、aをクリックするa.clicked
ことであり、それはそれ自体.hide()
のli elements
外側li
ですが、ul
親を見つけて、私が行うul
クラスを配置するのは問題ありません。ここで難しいのは、内のすべての要素を除外することです。面倒に聞こえるので、スクリプトでできる限りコメントするようにしています。li
li.active
li.active
入力してくれてありがとう
編集:私は説明するのに貧弱な仕事をしましたが、私がクリックするように、非表示にすることになっていますlevel 1 - 1
、そしてそれlevel 1 - 2
は私たちが2-1ectでメニューを深くするにつれてパターンです
ここの最初はデモです:http: //jsfiddle.net/Abj9u/6/
$('.clicked').on('click', function(){
var $this = $(this);
//activate this li
$this.parent('li:first').addClass('active');
//hide the other level (1)(2)(3)(4)(ect..) li items
//is there a way to exlude .active li and its children without adding a class like .sub to the sub li's?
$this.parents('ul:first').find('li').not('.active').hide();
//add class to this for style
$this.addClass('selected');
//show the sub ul
$this.parent().children('ul:first').show();
});
html
<ul id="nav">
<li>
<a href="#" class="clicked">Level 1 - 1</a>
<ul class="hidden">
<li><a href="#" class="clicked">Level 2.1 - 1</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.1 - 1</a></li></ul>
</li>
<li><a href="#" class="clicked">Level 2.2 - 1</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.2 - 1</a></li></ul>
</li>
<li><a href="#" class="clicked">Level 2.3 - 1</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.3 - 1</a></li></ul>
</li>
</ul>
</li>
<li>
<a href="#" class="clicked">Level 1 - 2</a>
<ul class="hidden">
<li><a href="#" class="clicked">Level 2.1 - 2</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.1 - 2</a></li></ul>
</li>
<li><a href="#" class="clicked">Level 2.2 - 2</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.2 - 2</a></li></ul>
</li>
<li><a href="#" class="clicked">Level 2.3 - 2</a>
<ul class="hidden"><li><a href="#" class="clicked">Level 3.3 - 2</a></li></ul>
</li>
</ul>
</li>
</ul>