トップレベルのリンクをアクティブにしてクリック可能に保ちながら、矢印のトグルでアクティブにできるドロップダウンを使用して垂直メニューを作成しようとしています。私はカスタム CMS を使用しているため、これを機能させる方法に関していくつかの制約があります。
HTML
<ul class="topnav">
<li class="tn_first">
<span></span><a class="topmenu" href="/default.asp">Home</a>
</li>
<li class="tn_mid">
<span></span><a class="topmenu" href="/listings.asp">My Listings</a>
<ul class="subnav">
<li class="sn_first">
<a class="submenu" href="#">Listing 1</a>
</li>
<li class="sn_mid">
<a class="submenu" href="#">Listing 2</a>
</li>
<li class="sn_last">
<a class="submenu" href="#">Listing 3</a>
</li>
</ul>
</li>
<li class="tn_last">
<span></span><a class="topmenu" href="/links.asp">System Pages</a>
<ul class="subnav">
<li class="sn_first">
<a class="submenu" href="#">Page 1</a>
</li>
<li class="sn_mid">
<a class="submenu" href="#">Page 2</a>
</li>
<li class="sn_last">
<a class="submenu" href="#">Page 3</a>
</li>
</ul>
</li>
</ul>
これで、非常に単純な UL LI メニュー システムが完成しました。トップ レベルのナビゲーションのテンプレートに、トグル スイッチとして使用したい span タグを追加しました。スパンは何にでも変更できます。それは私が現在持っているものです。
私が遭遇した問題は、これがテンプレート システムであることを考えると、スパンを入れるオプションがありますが、ul.subnav が同じ li に存在するかどうかに基づいて条件付きで表示するオプションがないことです。したがって、実際にこの条件を満たすものに display:block を適用する何らかの方法が必要です。その後、デフォルトで他のスパンを display:none にします。
このソリューションを使用してみましたが、ある程度は機能しましたが、複数のドロップダウンでは機能しません。メニュー構造にドロップダウンの単一のインスタンスがある場合にのみ機能するようです。
jQuery トグル ドロップダウン メニュー と http://jsfiddle.net/hXNnD/1/
Javascript
jQuery(document).ready(function () {
var subMenu = jQuery("li ul li");
var linkClick = jQuery("ul li").filter(":has(ul)");
subMenu.hide();
linkClick.click(function (e) {
e.preventDefault();
subMenu.slideToggle("fast");
});
});
2 つのサブ UL を持つ別の例を作成したので、コードが落ちている場所を確認できます。