// // 階層メニューVer2.2(DOM版) 2003.03.29 // // 改変、配布はご自由にどうぞ // ただし、コメントは消したり変えたりしないでください // オリジナルスクリプト作成 わごな // 配布元 http://wws.cside.com/factory/ // // 使い方 // // まず、htmlのリスト(ULとLI)でメニューを書きます。 // このとき、以下のルールを守ってください。 // 先頭のULにはIDをつける。 // ULの配下にLI以外を書いたり、LI配下にA及びUL以外を書かない。 // (Aの内側には書いてもかまいません) // // 次に、htmlの内の必要な部分に変更を加えてください。 // HEAD内でこのファイル「ex_menu.js」をリンクする。 // BODYのonloadで初期化関数(ex_menu_init)を呼び出す。(アーギュメントは先頭のULのIDとカテゴリーのアンカーのクラスです) // // 以上です。 // // オプションです。 // 設定値にタグは使えません。すなわち画像を使用することもできません。(書くならhtml側のアンカーの内側に書いてください) var Omake1_bofore = '▽'; //リンクテキスト(カテゴリ名)への付加文字(前) var Omake1_after = ''; //リンクテキスト(カテゴリ名)への付加文字(後) var Omake2_bofore = ' '; //リンクテキスト(細項目)への付加文字(前) var Omake2_after = ' >>'; //リンクテキスト(細項目)への付加文字(後) // オプション・ここまで var Menu_Obj; //先頭のULのID //onclickハンドラ-sub クリックされた場所から遡って開いている余計なブロックを閉じる function ex_menu_ope_sub(Cl_obj) { var i,j; for(i=0;Cl_obj.parentNode.childNodes[i];i++) { if(Cl_obj.parentNode.childNodes[i] != Cl_obj) { for(j=0;Cl_obj.parentNode.childNodes[i].childNodes[j];j++) { if(Cl_obj.parentNode.childNodes[i].childNodes[j].tagName == 'UL') { if(Cl_obj.parentNode.childNodes[i].childNodes[j].style.display == 'block') { Cl_obj.parentNode.childNodes[i].childNodes[j].style.display = 'none'; } } } } } if(Cl_obj.parentNode != Menu_Obj) { ex_menu_ope_sub(Cl_obj.parentNode.parentNode); } } //onclickハンドラ function ex_menu_ope() { var i; ex_obj = this; if(ex_obj.parentNode.childNodes[1].style.display == 'none') { ex_obj.parentNode.childNodes[1].style.display = 'block'; ex_menu_ope_sub(ex_obj.parentNode); } else { ex_obj.parentNode.childNodes[1].style.display = 'none'; } // return false; } //初期化-sub 全ULを閉じ、さらにULがあるアンカーにonclicハンドラを登録する。 function ex_menu_init_sub(Listobj) { var i,j,k,l; var MoreMenu = new Array(0); var thisAnchor = new Array(0); for(i=0;Listobj.childNodes[i];i++) { if(Listobj.childNodes[i].tagName == 'LI') { for(l=0,k=0,j=0;Listobj.childNodes[i].childNodes[j];j++) { if(Listobj.childNodes[i].childNodes[j].tagName == 'UL') { Listobj.childNodes[i].childNodes[j].style.display = 'none'; ex_menu_init_sub(Listobj.childNodes[i].childNodes[j]); k++; } if(Listobj.childNodes[i].childNodes[j].tagName == 'A') { thisAnchor[l++] = Listobj.childNodes[i].childNodes[j]; } } if(thisAnchor.length >0 ) { if(k >0 ) { thisAnchor[0].onclick = ex_menu_ope; if(thisAnchor[0].firstChild.nodeValue) { thisAnchor[0].firstChild.nodeValue = Omake1_bofore + thisAnchor[0].firstChild.nodeValue + Omake1_after; } } else { if(thisAnchor[0].firstChild.nodeValue) { thisAnchor[0].firstChild.nodeValue = Omake2_bofore + thisAnchor[0].firstChild.nodeValue + Omake2_after; } } } } } } // 初期化(先頭のULのID) function ex_menu_init(M_id) { if(! document.getElementById) { return ; } Menu_Obj = document.getElementById(M_id); ex_menu_init_sub(Menu_Obj); }