ツリーメニュー
試しにやってみたら、思いの外簡単に出来た。
とはいえ、出来たっていうだけで、実際に使うにはもう一工夫も二工夫も要るでしょう。
まぁ、特に装飾を必要としないんであれば使えるとは思う。
ソース
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample</title> <style type="text/css"> /* メニューの体裁を整えるcss */ #treemenu li { list-style-type: none; cursor: pointer; border: solid 1px #dcdcdc; width: 200px; margin-top: -1px; } </style> <script type="text/javascript"> function treeMenu(e) { var tgt = e.target || e.srcElement; if (tgt.tagName != 'LI') return; var elm = tgt.getElementsByTagName('UL'); if (elm.length) { var stat = (elm[0].style.display == 'none') ? 'block': 'none'; var chgStat = (stat == 'none') ? 'block': 'none'; elm[0].style.display = stat; //display:none時、子ツリーが存在すれば、子ツリーごと非表示にする elm = elm[0].getElementsByTagName('UL'); if (stat == 'none' && elm.length) { while (elm.length) { elm[0].style.display = stat; elm = elm[0].getElementsByTagName('UL'); } } } } function initialize() { var elm = document.getElementById('treemenu'); if (document.attachEvent) { elm.attachEvent('onclick', treeMenu); } else if (document.addEventListener) { elm.addEventListener('click', treeMenu, false); } else return false; //onload時は、子ツリーを全て非表示にする elm = elm.getElementsByTagName('UL'); if (elm.length) { var i = 0; while (elm[i]) { elm[i].style.display = 'none'; i++; } } } if (window.attachEvent) { window.attachEvent('onload', initialize); flg = 0; } else if (window.addEventListener) { window.addEventListener('load', initialize, false); flg = 1; } else { ; } </script> </head> <body> <div id="menubox"> <ul id="treemenu"> <li>はてな <ul> <li>ダイアリー <ul> <li>ほげほげ日記 <li>ふがふが日記 <li>ぴよぴよ日記 </ul> <li>ブックマーク <li>ハイク <li>アンテナ <li>キーワード </ul> <li>Google <ul> <li>ウェブ検索 <li>イメージ <li>Chrome <li>ノートブック <li>Blogger <li>Gmail </ul> <li>Yahoo <ul> <li>ウェブ検索 <li>オークション <li>ファイナンス <li>メール </ul> <li>SO NOTE そうのて(;^ω^) </ul> </div> </body> </html>
ソースの記述をちゃんとすれば、メニューをいくらでも入れ子にする事が可能。