メニューで現在位置を表示するJSライブラリ

2007年9月17日

メニューでjavascriptのみで現在位置を表示するJSライブラリをご紹介します。

menu.gif

どういったものかというと、マークアップでメニューに各ページごとにIDやクラスをふらなくても現在のページをハイライトするという機能です。

イメージをCSSで背景にしいて使用する場合は、アンカータグに”here”というclassをつけるという仕組みを利用し、CSSを使わずimgタグでメニューを組む場合は命名規則として、menu_on menu_offといったように通常時に_offとハイライト時に_onとつけてください。src属性にアクセスしてoffとonを置換する仕組みを利用しています。

imgタグをCSSでaタグの背景にしいて利用する場合のHTMLとJavascriptのコード

HTML

<ul id="menu">
<li><a href="index.html">ホーム</a></li>
<li><a href="menu1.html">メニュー1</a></li>
<li><a href="menu2.html">メニュー2</a></li>
<li><a href="menu3.html">メニュー3</a></li>
</ul>

JSコード

function highlightpage(){
if(!document.getElementsByTagName) return false;
if(!document.getElementById) return false;
if(!document.getElementById("menu")) return false;
var nav = document.getElementById("menu");
var links = nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
var linkurl = links[i].getAttribute("href");
var currenturl = window.location.href;
if(currenturl.indexOf(linkurl) != -1){
links[i].className = "here";
}
}
}
if(window.addEventListener) {
window.addEventListener("load", highlightpage, false);
}
else if(window.attachEvent) {
window.attachEvent("onload", highlightpage);
}

imgタグを利用する場合のHTMLとJavascriptのコード

HTML

<ul id="menu">
<li><a href="index.html"><img src="images/menu1_off.gif" alt="ホーム" /></a></li>
<li><a href="menu1.html"><img src="images/menu2_off.gif" alt="メニュー1" /></a></li>
<li><a href="menu2.html"><img src="images/menu3_off.gif" alt="メニュー2" /></a></li>
<li><a href="menu3.html"><img src="images/menu4_off.gif" alt="メニュー3" /></a></li>
</ul>

JSコード

function highlightpage(){
if(!document.getElementsByTagName) return false;
if(!document.getElementById) return false;
if(!document.getElementById("menu")) return false;
var nav = document.getElementById("menu");
var links = nav.getElementsByTagName("a");
for(var i=0; i<links.length; i++){
var linkurl = links[i].getAttribute("href");
var currenturl = window.location.href;
if(currenturl.indexOf(linkurl) != -1){
var linkimages = links[i].getElementsByTagName("img")[0]
var src_replace = linkimages.getAttribute("src").replace("_off.", "_on.");
linkimages.setAttribute("src",src_replace);
}
}
}
if(window.addEventListener) {
window.addEventListener("load", highlightpage, false);
}
else if(window.attachEvent) {
window.attachEvent("onload", highlightpage);
}

動作確認はWinのIE6、IE7、FireFoxのみです。

注意事項

この記事について