自閉式ツリーメニュー

今回は自動的に閉じるツリーメニューです。 下の例のどれかを開いておき、新たに別のどれかを開くと既に開いてあったメニューは 自動的に閉じます。(各ページのリンク先はありません)

クリック1
クリック2
クリック3

ツリーメニューを作動させるための JavaScript と CSS(スタイルシート)の部分です。 <head>〜</head>の中に置いてください。 このスクリプトはDOM Level 1 準拠ですので、どのブラウザでも動作するはずです。 実はこれ、メニュー付き疑似インラインフレーム で作った dmenu(menu_class,menu_id) に少し手を加えただけのもので、 開いている部分をクリックする事で閉じるように改造しました。
2007/01/13 入れ子にして使う場合も問題無く動作するよう変更しました。

<script type="text/javascript"><!--
function tree2(menu_class,menu_id) {
 var div=document.getElementById(menu_id);
 if (div.style.display == "block") div.style.display="none";
 else {
  var sib=div.parentNode.childNodes;
  for (var i=0; i < sib.length; i++)
   if (sib[i].className == menu_class) sib[i].style.display="none";
  div.style.display="block";
 }
}
// --></script>

<style type="text/css"><!--
.tree { display:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
--></style>
※ リンク下線の有無や文字色はスタイルシートを適当に変えてください。

連動させるツリーメニューに全て同じクラス名を設定し、 javascript:tree2('クラス名','idの値')でリンクします。 また、CSSの部分では、このクラス名をクラスセレクタ(この例では .tree)として 利用し、display:none; とスタイル規則で初期状態を非表示にしています。

idやクラス名(class属性値)に使用する文字は半角で、頭文字は必ずアルファベットから 始め、数字・アルファベット・ハイフン・アンダースコア・コロン・ピリオドの何れかの 組合せにしないといけません。また、idは重複しないよう注意してください。

<a href="javascript:tree2('tree','menu1');" title="クリック!">クリック1</a><br>
<div class="tree" id="menu1">
├<a href="未設定" title="作成中です" target="未定">妖しいページ</a><br>
└<a href="未設定" title="教えられません" target="未定">秘密のページ</a><br>
</div>

<a href="javascript:tree2('tree','menu2');" title="クリック!">クリック2</a><br>
<div class="tree" id="menu2">
├<a href="未設定" title="忘れました" target="未定">アホなページ</a><br>
├<a href="未設定" title="ぶっ飛びました" target="未定">ハイなページ</a><br>
└<a href="未設定" title="公開できません" target="未定">シャイなページ</a><br>
</div>

<a href="javascript:tree2('tree','menu3');" title="クリック!">クリック3</a><br>
<div class="tree" id="menu3">
├<a href="未設定" title="封印されました" target="未定">邪悪なページ</a><br>
└<a href="未設定" title="実在しません" target="未定">幻のページ</a><br>
</div>
※ JavaScriptが無効な環境でのアクセシビリティについては ツリーメニューの記事の最後の部分もご覧ください。 CSSの部分 .tree { display:none; } を削除して document.write() で出力するように 変更することで解消出来ます。