1+ <!DOCTYPE html>
2+ < html >
3+ < head lang ="en ">
4+ < meta charset ="UTF-8 ">
5+ < title > </ title >
6+ < style >
7+ # menu {width : 400px }
8+ # menu span {display : block;cursor : pointer;}
9+ # menu span .close : before {content : "[+] " ;}
10+ # menu span .open : before {content : "[·] " ;}
11+ ul li {margin-bottom : 10px ; cursor : pointer;}
12+ span ul li {margin-bottom : 10px ;}
13+ </ style >
14+ </ head >
15+ < body >
16+ < ul id ="menu ">
17+ < li >
18+ < span > 第一:1111111</ span >
19+ < ul >
20+ < li > < span > 第一:1111111</ span > </ li >
21+ < li > < span > 第二:222222</ span > </ li >
22+ < li > < span > 第三:333333</ span > </ li >
23+ < li > < span > 第四:444444</ span > </ li >
24+ < li > < span > 第五:555555</ span > </ li >
25+ < li > < span > 第六:666666</ span > </ li >
26+ </ ul >
27+ </ li >
28+ < li >
29+ < span > 第二:222222</ span >
30+ < ul >
31+ < li > < span > 第一:1111111</ span > </ li >
32+ < li > < span > 第二:222222</ span > </ li >
33+ < li > < span > 第三:333333</ span > </ li >
34+ < li > < span > 第四:444444</ span > </ li >
35+ < li > < span > 第五:555555</ span > </ li >
36+ < li > < span > 第六:666666</ span > </ li >
37+ </ ul >
38+ </ li >
39+ < li >
40+ < span > 第三:333333</ span >
41+ < ul >
42+ < li > < span > 第一:1111111</ span > </ li >
43+ < li > < span > 第二:222222</ span > </ li >
44+ < li >
45+ < span > 第三:333333</ span >
46+ < ul >
47+ < li > < span > 第一:1111111</ span > </ li >
48+ < li > < span > 第二:222222</ span > </ li >
49+ < li > < span > 第三:333333</ span > </ li >
50+ < li > < span > 第四:444444</ span > </ li >
51+ < li > < span > 第五:555555</ span > </ li >
52+ < li > < span > 第六:666666</ span > </ li >
53+ </ ul >
54+ </ li >
55+ < li > < span > 第四:444444</ span > </ li >
56+ < li > < span > 第五:555555</ span > </ li >
57+ < li > < span > 第六:666666</ span > </ li >
58+ </ ul >
59+ </ li >
60+ < li >
61+ < span > 第四:444444</ span >
62+ < ul >
63+ < li > < span > 第一:1111111</ span > </ li >
64+ < li > < span > 第二:222222</ span > </ li >
65+ < li > < span > 第三:333333</ span > </ li >
66+ < li > < span > 第四:444444</ span > </ li >
67+ < li > < span > 第五:555555</ span > </ li >
68+ < li > < span > 第六:666666</ span > </ li >
69+ </ ul >
70+ </ li >
71+ < li >
72+ < span > 第五:555555</ span >
73+ < ul >
74+ < li > < span > 第一:1111111</ span > </ li >
75+ < li > < span > 第二:222222</ span > </ li >
76+ < li > < span > 第三:333333</ span > </ li >
77+ < li > < span > 第四:444444</ span > </ li >
78+ < li > < span > 第五:555555</ span > </ li >
79+ < li > < span > 第六:666666</ span > </ li >
80+ </ ul >
81+ </ li >
82+ < li >
83+ < span > 第六:666666</ span >
84+ < ul >
85+ < li > < span > 第六:第一:1111111</ span > </ li >
86+ < li > < span > 第六:第二:222222</ span > </ li >
87+ < li > < span > 第六:第三:333333</ span > </ li >
88+ < li > < span > 第六:第四:444444</ span > </ li >
89+ < li > < span > 第六:第五:555555</ span > </ li >
90+ < li >
91+ < span > 第六:第六:666666</ span >
92+ < ul >
93+ < li > < span > > 第六:第六:第一:1111111</ span > </ li >
94+ < li > < span > 第六:第六:第二:222222</ span > </ li >
95+ < li > < span > 第六:第六:第三:333333</ span > </ li >
96+ < li > < span > 第六:第六:第四:444444</ span > </ li >
97+ < li > < span > 第六:第六:第五:555555</ span > </ li >
98+ < li > < span > 第六:第六:第六:666666</ span > </ li >
99+ </ ul >
100+ </ li >
101+ </ ul >
102+ </ li >
103+ </ ul >
104+ </ body >
105+ </ html >
106+ < script >
107+ var oSpans = document . getElementById ( "menu" ) . getElementsByTagName ( "span" ) ;
108+ for ( var i = 0 ; i < oSpans . length ; i ++ ) {
109+ var oSapn = oSpans [ i ] ;
110+ var oUl = getNext ( oSapn ) ;
111+ if ( oUl && oUl . nodeName === "UL" ) {
112+ oUl . style . display = "none" ;
113+ oSapn . style . backgroundColor = "orange" ;
114+ oSapn . className = "close"
115+ } else {
116+ oSapn . style . backgroundColor = "#CCC" ;
117+ }
118+
119+ }
120+ document . getElementById ( "menu" ) . onclick = function ( event ) {
121+ event = event || window . event ;
122+ var target = event . target || event . srcElement ;
123+ if ( target . nodeName == "SPAN" ) {
124+ var oUl = getNext ( target ) ;
125+ if ( oUl && oUl . nodeName == "UL" ) {
126+ if ( oUl . style . display == "none" ) {
127+ oUl . style . display = "block" ;
128+ target . className = "open"
129+ } else {
130+ oUl . style . display = "none" ;
131+ target . className = "close" ;
132+ /*解决顶级关闭然后打开;第二级和第三级处于打开状态的bug*/
133+ if ( oUl . getElementsByTagName ( "UL" ) ) {
134+ var oUls = oUl . getElementsByTagName ( "UL" ) ;
135+ for ( var i = 0 ; i < oUls . length ; i ++ ) {
136+ getPre ( oUls [ i ] ) . className = "close" ;
137+ oUls [ i ] . style . display = "none" ;
138+ }
139+ }
140+ }
141+ }
142+ }
143+ } ;
144+
145+ function getNext ( curEle ) { //下一个弟弟节点,第一个弟弟节点;
146+ if ( "getElementsByClassName" in window ) {
147+ return curEle . nextElementSibling ;
148+ }
149+ var next = curEle . nextSibling ;
150+ while ( next && next . nodeType !== 1 ) {
151+ next = next . nextSibling ;
152+ }
153+ return next ;
154+ } ;
155+ function getPre ( curEle ) { //上一个哥哥节点;
156+ if ( "getElementsByClassName" in window ) {
157+ return curEle . previousElementSibling ;
158+ }
159+ var pre = curEle . previousSibling ;
160+ while ( pre && pre . nodeType !== 1 ) {
161+ pre = pre . previousSibling ;
162+ }
163+ return pre ;
164+ }
165+ </ script >
0 commit comments