電子書籍の厳選無料作品が豊富!

こちらのサイトの↓
http://f32.aaa.livedoor.jp/~azusa/index.php?t=js …
開閉式ツリー型メニュー(ロールオーバーあり)を参考にメニューを作ったのですが、
リンク先へ飛ぶと元の畳まれたメニューになってしまうのです。
クリックをしてメニューが開いた状態を保ちながら
次のページにも反映される様にするにはどうしたら良いでしょうか?
ジャバもクッキーも調べてみたのですが、どうにも初心者の私には難しくて理解が困難でした;
誰かお願いいたします。

A 回答 (2件)

ひさしぶりにちょっと気張って書いてみました。


煩雑なためcssとjsファイルを外部化してあります。
ざっと書いたのでちょこちょこ無駄な部分があるかも。
なおulにulを入れ子するときにはliで囲んだほうがプログラム的に
なにかと楽です。

・treemenu.css
#hoge ul{
padding:0px;
padding-left:20px;
}
#hoge li{
list-style:none;
margin:0px;
padding:0px;
}

・treemenu.js
function setCookie(key,val){
tmp = key+"="+escape(val)+";";
tmp += "expires=Fri, 31-Dec-2030 23:59:59;";
document.cookie = tmp;
};
function getCookie(key){
tmp = document.cookie+";";
tmp1 = tmp.indexOf(key,0);
if(tmp1 != -1){
tmp = tmp.substring(tmp1,tmp.length);
start = tmp.indexOf("=",0);
end = tmp.indexOf(";",start);
return(unescape(tmp.substring(start+1,end)));
}
return("");
};
function delCookie(key){
expiredate = new Date();
expiredate.setYear(expiredate.getYear()-1);
tmp = key+"=;";
tmp += "expires="+expiredate.toGMTString();
document.cookie = tmp;
};
//ここまでがクッキー処理(ほかでも汎用的につかえる)
no=0;
window.onload=function(){
var ie=(navigator.appName.indexOf("Microsoft") >= 0);
var hoge=document.getElementById('hoge');
hoge.setChild=setChild;
hoge.setChild();
var ulgroup=hoge.getElementsByTagName('UL');
for(var i=0;i<ulgroup.length;i++){
if(ie) ulgroup[i].style.height=0;
ulgroup[i].setChild=setChild;
ulgroup[i].setChild();
}
}

function changeImg(){
var cnode=this.childNodes;
for(var i=0;i<cnode.length;i++){
if(cnode[i].nodeName=="IMG"){
cnode[i].src=(this.dispChild==false)?"hide.gif":"show.gif";
}
}
}
function setChild(){
var cnode=this.childNodes;
var preobj=new Object;
var obj=new Object;
for(var i=0;i<cnode.length;i++){
if(cnode[i].nodeName=="LI"){
if(cnode[i].getElementsByTagName('ul').length>0){
var dispFlg= getCookie("ul") & Math.pow(2,no);
preobj.no=no++;
preobj.dispChild=dispFlg;
preobj.child=cnode[i];
preobj.changeImg=changeImg;
preobj.innerHTML="<img src='hide.gif'>"+preobj.innerHTML
if(preobj.dispChild==false) preobj.child.style.display="none";
else preobj.changeImg();
preobj.onclick=function(){
this.dispChild=(this.dispChild==false)?true:false;
if(this.dispChild==false) this.child.style.display="none";
else this.child.style.display="";
this.changeImg();
var ul=getCookie("ul") ^ Math.pow(2,this.no);
setCookie("ul",ul);
}
}
preobj=cnode[i];
}
}
}

・treemenu.htm
<html>
<head>
<title>test</title>
<script type="text/javascript" src="treemenu.js"></script>
<link rel="stylesheet" type="text/css" href="treemenu.css">
</head>
<body>
<ul id="hoge">
<li>A</li>
<li>
<ul>
<li>A-1</li>
<li>
<ul>
<li>A-1-1</li>
<li>A-1-2</li>
<li>
<ul>
<li>A-1-2-1</li>
<li>A-1-2-2</li>
<li>A-1-2-3</li>
</ul>
</li>
<li>A-1-3</li>
</ul>
</li>
<li>A-2</li>
<li>
<ul>
<li>A-2-1</li>
<li>A-2-2</li>
<li>A-2-3</li>
</ul>
</li>
<li>A-3</li>
</ul>
</li>
<li>B</li>
<li>C</li>
<li>
<ul>
<li>C-1</li>
</ul>
</li>
<li>D</li>
</ul>
</body>
</html>
    • good
    • 0
この回答へのお礼

遅くなりまして申し訳ないです。
こんなに丁寧に記述して頂きましてありがとうございます。
これで何とか前に進めそうです。
本当にありがとうございました。

お礼日時:2007/06/20 10:14

クッキーを利用する。


ジャバではなくジャバスクリプト(全く異なる物)

クッキーに「どのメニューを展開しているか」という情報を保持させておきその情報をページ読込時(onLoad)に読み込んで再展開するのが妥当。
この方式だとクッキーが残っていれば再訪問した時に前回の展開状態が残る。
    • good
    • 0
この回答へのお礼

すいません。
そのクッキーの記述方法が分からなくて困っています。
とんでもないド素人で申し訳ないです。

お礼日時:2007/06/15 10:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!