上記の問題については、jQuery を使用してコードビンで解決策を実行しました。
デモ: http://codebins.com/bin/4ldqpa4
ここで、上記のソリューションを実行する手順について説明しました。
1) 最新の jQuery.js および querystring-0.9.0.js JavaScript ファイルをヘッダー タグに含めます。
2) HTML
<div id="panel">
<ul class="menu">
<li>
<a href="#?page=0">
Index
</a>
</li>
<li>
<a href="#?page=1">
About
</a>
</li>
<li>
<a href="#?page=2">
Test
</a>
<li>
</ul>
</div>
3) CSS
ul.menu{
border:1px solid #112266;
background:#ccc;
}
ul.menu li{
list-style:none;
display:inline-block;
margin-left:10px;
padding:0px;
width:60px;
text-align:center;
}
ul.menu li:hover{
background:#343434;
}
ul.menu li a{
padding:0px;
color:#113399;
text-decoration:none;
}
ul.menu li:hover a{
color:#c6b744;
text-decoration:underline;
}
ul.menu li.active{
background:#343434;
}
ul.menu li.active a{
color:#c6b744
}
4) jQuery:
$(function() {
$(".menu li").click(function() {
setTimeout(function() {
var page = $.QueryString("page");
$(".menu li").removeClass("active");
$(".menu li:eq(" + page + ")").addClass("active");
}, 200);
});
});
上記のソリューションでは、 #?page= のような href リンクを設定する必要があります。これは、bin で新しいページのリダイレクトを使用して Java スクリプトを実行することはできないためです。現在、ページはリダイレクトされていないため、クエリを変更するだけで setTimeout 関数を使用する必要があります#?page= による同じページの文字列。
プロジェクトで上記のソリューションを使用する場合は、上記の jQuery スクリプトを共通の場所に配置して、各メニュー リンクで実行し、現在のページ リンクをアクティブなクラスに設定します。
注: setTimeout 関数を削除する Wrapper は、その内部にコード ライン スクリプトを保持するだけです。以下のようになります。
$(function() {
$(".menu li").click(function() {
var page = $.QueryString("page");
$(".menu li").removeClass("active");
$(".menu li:eq(" + page + ")").addClass("active");
});
});