我有一個基本的嵌套列表如下菜單:設定活動狀態中嵌套元素
<nav>
<ul id="mainNav">
<li><a href="expand-the-sub-menu">Option 1</a>
<ul class="navChild">
<li><a href="somewhere">Option 1 Link 1</a></li>
<li><a href="somewhere">Option 1 Link 2</a></li>
<li><a href="somewhere">Option 1 Link 3</a></li>
<li><a href="somewhere">Option 1 Link 4</a></li>
<li><a href="somewhere">Option 1 Link 5</a></li>
</ul>
</li>
<li><a href="expand-the-sub-menu">Option 2</a>
<ul class="navChild">
<li><a href="somewhere">Option 2 Link 1</a></li>
<li><a href="somewhere">Option 2 Link 2</a></li>
<li><a href="somewhere">Option 2 Link 3</a></li>
<li><a href="somewhere">Option 2 Link 4</a></li>
<li><a href="somewhere">Option 2 Link 5</a></li>
</ul>
</li>
<li><a href="somewhere">Option 3</a></li>
<li><a href="somewhere">Option 4</a></li>
<li><a href="somewhere">Option 5</a></li>
<li><a href="somewhere">Option 6</a></li>
</ul>
</nav>
而且我已經寫了一些條件腳本產生所需的動畫效果,根據當前菜單狀態:
$('#mainNav ul').hide();
$('#mainNav>li>a').click(function(){
var elm = this;
// If clicked element has a sibling ul with specified class
if ($(elm).next().hasClass('navChild')){
// ... & another child ul is already visible
if ($('.navChild').is(':visible')){
$('#mainNav ul').fadeOut(300, function() {
$(elm).siblings('ul').fadeIn(300);
});
// ... & no child ul is visible
} else {
$('nav').animate({bottom:'60px'},300,function(){
$(elm).next().fadeIn(300);
});
}
// Else clicked element has no sibling ul with specified class
} else {
// ... & another child ul is already visible
if ($('.navChild').is(':visible')){
$('#mainNav ul').fadeOut(300, function(){
$('nav').animate({bottom:'24px'});
});
// ... & no child ul is visible
} else {
// Follow link as usual
}
}
});
代碼可能是醜陋和繁瑣,但它的作品。
我現在要做的是突出顯示當前的菜單項。如果它是頂級<a>
標記,那麼應該突出顯示該鏈接。但是,當處於子級<a>
標記中時,鏈接和的父鏈接都應突出顯示。另一個需要注意的是,我希望所有的小孩鏈接在點擊父鏈接顯示時處於非活動狀態。
這裏有一個jsFiddle http://jsfiddle.net/pHwgk,幾乎可以工作,如果你顯示,隱藏,然後重新顯示子級<ul>
,你應該希望看到我的意思 - 即我不希望它記住它以前的狀態英寸
我希望有人會有一個優雅的解決方案,以節省我可能不必要的大規模編碼。
它總是簡單的解決方案,避開我最長的時間......謝謝!我確信答案總的來說會是一個更簡單的函數,但這肯定會有效。 – verism