構建此菜單,但我在排除父類及其子元素時遇到問題。我希望沒有額外的課程來解決這個問題。從hide()中排除父元素及其子元素
所以它想工作的方式是點擊一個a.clicked
並.hide()
的li elements
外自己的li
但隨着的ul
它沒有問題找到父ul
範圍,把一個類上li
我在做li.active
。這裏的難點在於排除li.active
中的所有元素。 它聽起來很凌亂,所以我儘可能在劇本中評論最好的一面。
謝謝你們對輸入
編輯:我做的不好解釋,但就像我點擊level 1 - 1
和level 1 - 2
是假設隱藏和多數民衆的格局,因爲我們去打倒菜單更深的2 - 1 ECT
首先這裏是演示: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>
如果隱藏父,孩子們將被自動隱藏太多,所以你真正需要做的是隱藏相關''是的,對嗎? – Gareth
@Gareth:這就是我的想法。就像'$ this.parents('ul:first> li')。not('.active')。hide();' –
是的,那就是我想要做的。它基本上隱藏所有其他'li's'在同一水平上可以這麼說 –