アクティブな状態を静的な html メニューに改造しようとしています。メニューの構造は次のとおりです。
<div id="navbar">
ul id="MenuBar1" class="MenuBarHorizontal">
<li><a href="index.htm">Home</a></li>
<li><a href="about.htm">About Us</a></li>
<li><a href="products.htm">Products</a>
<ul>
<li><a href="product-grp1">Product Groups 1</a>
<ul>
<li><a href="product1.htm">Product 1</a>
<li><a href="product2.htm">Product 2</a>
<li><a href="product3.htm">Product 3</a>
</ul>
</li>
</ul>
</li>
</ul>
</div>
これは、実際にメガ メニューとして表示される 3 レベルのメニュー システムであることがわかります。
私がやりたいことは、あなたが見ているページの URL に基づいて、最上位メニューにアクティブな状態を追加することです。このアクティブな状態は、あなたが第 2 レベルのページにいるか第 3 レベルのページにいるかを示す必要があります。サイトには Google から特定のページへの直接リンクが多数あるため、クリックではなくページの URL に基づいてこれを行う必要があるため、それらの場所も示す必要があります。
ファイル構造はフラットなので、各 URL はhttp://www.thesite.com/about.htmなどであることに注意してください。
以前の質問からこれを整理しようとしてきましたが、うまくいきません。それはメニューの深さのせいだと思いますが、誰かが私にできるガイダンスを本当に感謝します.
ご助力いただきありがとうございます。これは本当に私を正しい軌道に乗せました。最後に、私は以下を使用しました: -
/* The following adds active to the next level up of the url */
$('#MenuBar1 li a').each(function() {
if(filename == $(this).attr('href')) {
$(this).addClass('active');
}
});
/* The following line looks for the .active class, then the parent of it with the #navbar ul.... structure, then adds the active class to that one only */
$('.active').parents('#navbar ul.MenuBarHorizontal li').addClass('active-top');
$('#navbar ul.MenuBarHorizontal>li').addClass('menu-top');
これが行うことは、jQuery を使用して .active クラスを特定のリンクに追加し、.active-top を親に追加することです (残念ながら、必要なレベルだけをターゲットにする方法がわかりませんでした)。最後の行は、メニューのトップ レベルに .menu-top クラスを追加します。
この構造により、書式設定が DOM を下って他の子セレクターに流れることなく、メニューのトップ レベルのみをターゲットにすることができます。おそらく最もエレガントなソリューションではありませんが、機能します。
アドバイスをくれた皆さんに改めて感謝します。