1 | /*------------------------------------------ |
---|
2 | 指定されたノードを、オープンまたはクローズする |
---|
3 | ------------------------------------------*/ |
---|
4 | function openOrClose(tgt){ |
---|
5 | //指定ノードが「hidden」のとき、リストを可視化 |
---|
6 | if(tgt.style.visibility == "hidden"){ |
---|
7 | tgt.style.display = "block"; |
---|
8 | tgt.style.visibility = "visible"; |
---|
9 | tgt.style.height = "auto"; |
---|
10 | tgt.style.paddingTop = "0.25em"; |
---|
11 | tgt.style.lineHeight = "1em"; |
---|
12 | tgt.style.opacity = 1.0; |
---|
13 | } |
---|
14 | //指定ノードが「hidden」でないとき、リストを隠す |
---|
15 | else{ |
---|
16 | tgt.style.display = "none"; |
---|
17 | tgt.style.visibility = "hidden"; |
---|
18 | tgt.style.height = "0px"; |
---|
19 | tgt.style.paddingTop = "0"; |
---|
20 | tgt.style.lineHeight = 0; |
---|
21 | tgt.style.opacity = 0; |
---|
22 | } |
---|
23 | } |
---|
24 | |
---|
25 | /*------------------------------------------ |
---|
26 | リストープン処理 |
---|
27 | ------------------------------------------*/ |
---|
28 | function listopen(lv, num){ |
---|
29 | var tgt = document.getElementsByClassName("level" + lv)[num]; |
---|
30 | var cnt = 0; |
---|
31 | //次のレベルをサーチ → 次のレベルのリストをオープンする |
---|
32 | for(var i=0; i < document.getElementsByClassName("level" + (lv+1)).length; i++){ |
---|
33 | var next_tgt = document.getElementsByClassName("level" + (lv+1))[i]; |
---|
34 | //li |
---|
35 | if (next_tgt.parentNode == tgt || next_tgt.parentNode.parentNode == tgt){ |
---|
36 | openOrClose(next_tgt); |
---|
37 | cnt++; |
---|
38 | } |
---|
39 | } |
---|
40 | //次のレベルをサーチ → 表示ボタンの状態を変更 |
---|
41 | for(var i=0; i < tgt.childNodes.length; i++){ |
---|
42 | var next_tgt = tgt.childNodes[i]; |
---|
43 | //ul |
---|
44 | if(next_tgt.tagName == "UL"){ |
---|
45 | if(next_tgt.style.height == "0px"){ |
---|
46 | //for(var i=0; i<next_tgt.parentNode.childNodes.length; i++){ |
---|
47 | if(event.srcElement.parentNode.className == "category_header plus"){ |
---|
48 | event.srcElement.innerText = '−'; |
---|
49 | event.srcElement.parentNode.className = "category_header minus"; |
---|
50 | } |
---|
51 | //} |
---|
52 | next_tgt.style.height = "auto"; //1.5*cnt + "em"; |
---|
53 | next_tgt.style.marginTop = 0; |
---|
54 | next_tgt.style.marginBottom = 0; |
---|
55 | } |
---|
56 | else{ |
---|
57 | for(var i=0; i<next_tgt.parentNode.childNodes.length; i++){ |
---|
58 | if(event.srcElement.parentNode.className == "category_header minus"){ |
---|
59 | event.srcElement.innerText = '+'; |
---|
60 | event.srcElement.parentNode.className = "category_header plus"; |
---|
61 | } |
---|
62 | } |
---|
63 | next_tgt.style.height = "0px"; |
---|
64 | next_tgt.style.marginTop = 0; |
---|
65 | next_tgt.style.marginBottom = 0; |
---|
66 | } |
---|
67 | } |
---|
68 | } |
---|
69 | } |
---|
70 | |
---|
71 | /*------------------------------------------ |
---|
72 | クリックイベントを設定する |
---|
73 | ------------------------------------------*/ |
---|
74 | function setclickevent(tgt, lv, num){ |
---|
75 | //レベル1以外の時は非表示に |
---|
76 | if(lv!=1){ |
---|
77 | tgt.style.visibility = "hidden"; |
---|
78 | tgt.style.display = "none"; |
---|
79 | tgt.style.height = "0px"; |
---|
80 | tgt.style.lineHeight = 0; |
---|
81 | tgt.style.paddingTop = 0; |
---|
82 | tgt.style.paddingBottom = 0; |
---|
83 | if(tgt.parentNode.tagName == "UL"){ |
---|
84 | tgt.parentNode.style.height = "0px"; |
---|
85 | tgt.parentNode.style.margin = "0"; |
---|
86 | tgt.parentNode.style.padding = "0"; |
---|
87 | tgt.parentNode.style.border = "none"; |
---|
88 | } |
---|
89 | } |
---|
90 | var hasLink_flg; |
---|
91 | if(tgt.childNodes.length){ |
---|
92 | for (var j = 0; j < tgt.childNodes.length; j++) { |
---|
93 | //クリック範囲の拡大 |
---|
94 | if(tgt.childNodes[j].tagName == 'A'){ |
---|
95 | tgt.setAttribute('onclick', 'location.href="' + tgt.childNodes[j].getAttribute('href') + '"'); |
---|
96 | } |
---|
97 | //アコーディオンリストの操作イベント関数を追加 |
---|
98 | else if(tgt.childNodes[j].tagName == 'UL'){ |
---|
99 | //▶を表示し、リストオープン関数を追加 |
---|
100 | var linkObj = document.createElement("a"); |
---|
101 | linkObj.innerText = '+'; |
---|
102 | tgt.childNodes[0].className="category_header plus"; |
---|
103 | tgt.childNodes[0].appendChild(linkObj); |
---|
104 | j++; |
---|
105 | linkObj.parentNode.setAttribute('onclick', 'listopen(' + lv + ',' + num + ')'); |
---|
106 | |
---|
107 | //tgt.setAttribute('onclick', 'listopen(' + lv + ',' + num + ')'); |
---|
108 | break; |
---|
109 | } |
---|
110 | } |
---|
111 | } |
---|
112 | } |
---|
113 | |
---|
114 | /*------------------------------------------ |
---|
115 | 初期化 |
---|
116 | ------------------------------------------*/ |
---|
117 | //level?クラスを持つノード全てを走査し初期化 |
---|
118 | function initCategoryList(){ |
---|
119 | var lv = 0; |
---|
120 | //level?クラスを持つノード全てに、クリックイベントを追加 |
---|
121 | while(document.getElementsByClassName("level" + (++lv)).length){ |
---|
122 | for (var i = 0; i < document.getElementsByClassName("level" + lv).length; i++) { |
---|
123 | setclickevent(document.getElementsByClassName("level" + lv)[i], lv, i); |
---|
124 | } |
---|
125 | } |
---|
126 | } |
---|