我清理了您的代碼,只使用一種方法,而不是爲每個菜單分別設置類。清潔劑html
css
js
,也使用較少的類。
說到CSS,你應該考慮下面這個。它曾經是.blockss
,現在你只需要改變的.b1
項目的CSS,如果他們的父母有.blocks
DEMO
希望這有助於和你明白它在做什麼。其實你可以甚至清理你的HTML多一點,即你可以刪除<div class="b1">
,並設置在<a>
的.b1
類,並使其display: block;
但這只是如果你真的想清理:)
.blocks .b1 {
display:inline-block;
}
HTML
<nav>
<ul>
<li> <a href="#" class="trigger" data-id="home">Home</a>
</li>
<li> <a href="#" class="trigger" data-id="products">Products</a>
</li>
</ul>
<div data-sub-id="home" class="block">
<div class="b1"><a href="#">Link 1</a>
</div>
<div class="b1"><a href="#">Link 2</a>
</div>
<div class="b1"><a href="#">Link 3</a>
</div>
</div>
<div data-sub-id="products" class="block">
<div class="b1"><a href="#">Link 1</a>
</div>
<div class="b1"><a href="#">Link 2</a>
</div>
<div class="b1"><a href="#">Link 4</a>
</div>
<div class="b1"><a href="#">Link 5</a>
</div>
</div>
</nav>
JS
$(".trigger").click(function() {
var $this = $(this),
ul = $this.parents('ul'),
dataId = $this.data('id'),
subMenu = $this.parents('nav').find('[data-sub-id="' + dataId + '"]'),
subMenus = $this.parents('nav').find('.block');
//remove classes from all items
ul.find('li a').each(function() {
$(this).removeClass('item-active');
});
subMenus.each(function() {
$(this).removeClass('blocks');
});
//add classes to this item
$this.addClass('item-active');
subMenu.addClass('blocks');
});
什麼問題呢?什麼需要發生? – 2014-10-31 16:50:10
是否有理由不選擇所有菜單項的一個功能?只需檢查 – 2014-10-31 16:55:04
@BojanPetkovski如果您點擊首頁,並且該產品處於活動狀態,則兩個產品都處於活動狀態。我希望以前的項目重置爲默認狀態。 – Steve 2014-10-31 16:57:12