2011-12-22 132 views
6

我正在此菜單中:jQuery的點擊菜單

enter image description here

HTML:

<ul id="menu"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
    <li><a href="#">Item 3</a></li> 
    <li><a href="#">Item 4</a></li> 
</ul><!-- end #menu --> 

<ul class="submenu submenu-1"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 
<ul class="submenu submenu-2"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 

<div class="hero hero-1">content</div> 
<div class="hero hero-2">content</div> 
<div class="hero hero-3">content</div> 
<div class="hero hero-4">content</div> 

的jQuery:

$('#menu li a').click(function() { 
    $('#menu li').removeClass('active'); 
    $('.submenu, .hero').slideDown('normal'); 
}); 
$('.submenu, .hero').hide(); 

...它目前顯示所有子菜單和英雄divs。我想要的是..如果它是#menu的第一個,它應該尋找submenu-1和hero-1並滑動。

我非常感謝任何幫助。

謝謝!

+0

這看起來像是一本教科書的右邊。你有任何伴隨的HTML? – Dutchie432 2011-12-22 14:10:53

+0

當然,html添加 – 3zzy 2011-12-22 14:12:10

+0

沒有,我使用balsamiq自己創建了模型,需要它爲我的網站。 – 3zzy 2011-12-22 14:13:25

回答

2

添加數據屬性原來的a項目。 (working sample - 由於沒有提供CSS,樣式不完全正確,但你明白了)。

<ul id="menu"> 
    <li><a href="#" data-slide="1">Item 1</a></li> 
    <li><a href="#" data-slide="2">Item 2</a></li> 
    <li><a href="#" data-slide="3">Item 3</a></li> 
    <li><a href="#" data-slide="4">Item 4</a></li> 
</ul><!-- end #menu --> 

然後,您的JS可以提取該ID以顯示正確的關聯子菜單和內容。

$('#menu li a').click(function() { 

    //Fetch the value of the 'slide' data attribute of the clicked link 
    var id = $(this).data('slide'); 

    $('.submenu, .hero').hide(); 
    $('#menu li').removeClass('active'); 
    $('.submenu-'+id+', .hero-'+id).slideDown('normal'); 

}); 
$('.submenu, .hero').hide(); 

使用這種方法在一些提到的(如.eq().index())其他方法的好處是,你可以重新安排原來的菜單項的順序,它不會甩開它的內容項獲得拉。所以這個HTML仍然會很好地工作......

<ul id="menu"> 
    <li><a href="#" data-slide="3">Item 3</a></li> 
    <li><a href="#" data-slide="1">Item 1</a></li> 
    <li><a href="#" data-slide="4">Item 4</a></li> 
    <li><a href="#" data-slide="2">Item 2</a></li> 
</ul><!-- end #menu --> 
+0

這不應該是'數據幻燈片'嗎? – m90 2011-12-22 14:37:14

+0

你可以使用'data-slide',然後使用'$(this).data('slide')' - 它會稍微提高性能,但對於4個(甚至20個)項目,我們真的不會說太多但我發現使用自定義屬性稍後重新找到該項目會更容易,如果需要的話,比如'$(a [slide =「2」])' - I'我將這種方法的經驗與數據屬性混合使用 – Dutchie432 2011-12-22 14:43:59

+0

我在想val ID代碼是誠實的。 – m90 2011-12-22 14:45:44

1

你可以使用jQuery的.index().eq()想在這個小提琴:http://jsfiddle.net/bUjud/1/
參見:http://api.jquery.com/eq/http://api.jquery.com/index/

+0

+1好主意,沒有額外的標記(: – peirix 2011-12-22 14:39:25

+0

使用這種方法可以防止您在將來需要這樣的操作時重新排序鏈接。一個壞主意,但這是一個需要考慮的問題,我知道我的老闆總是根據一年中的時間重新安排這樣的事情,或者可以使用受歡迎的項目 – Dutchie432 2011-12-22 14:51:11

1

DEMO

對於這一點:

<ul id="menu"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
    <li><a href="#">Item 3</a></li> 
    <li><a href="#">Item 4</a></li> 
</ul><!-- end #menu --> 

<ul class="submenu submenu-1"> 
    <li><a href="#">Item 1.1</a></li> 
    <li><a href="#">Item 1.2</a></li> 
    <li><a href="#">Item 1.3</a></li> 
    <li><a href="#">Item 1.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 
<ul class="submenu submenu-2"> 
    <li><a href="#">Item 2.1</a></li> 
    <li><a href="#">Item 2.2</a></li> 
    <li><a href="#">Item 2.3</a></li> 
    <li><a href="#">Item 2.4</a></li> 
</ul><!-- end #submenu.submenu-item1 --> 

<div class="hero hero-1">content 1</div> 
<div class="hero hero-2">content 2</div> 
<div class="hero hero-3">content 3</div> 
<div class="hero hero-4">content 4</div> 

使用此jQuery的:

$('#menu li a').click(function() { 
    var index = $('#menu li a').index(this) + 1; 
    $('.submenu, .hero').hide(); 
    $('#menu li').removeClass('active'); 
    $('.submenu-' + index + ', .hero-' + index).slideDown('normal'); 
}); 
$('.submenu, .hero').hide(); 

並檢查了jQuery.index()