具体代码如下:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;padding:10px;width:300px;border:1px dashed #008000;/*渐进增强:首先设置一个纯色的背景,对于不兼容css3的浏览器来说会使用纯色,对于兼容的浏览器,我们在下面在额外的增加一些渐变色,这样会覆盖掉上面*/background:#ffe470;background:-webkit-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);background:-moz-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);background:-o-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);background:linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);}.box li{position:relative;line-height:30px;}.box em{position:absolute;top:7px;left:0;width:16px;height:16px;background:url("img/icon.png") no-repeat -59px -28px;cursor:pointer;}.box span{display:block;padding-left:20px;}.box em.open{background-position:-42px -28px;}.box .two{margin-left:20px;}.box .three{margin-left:40px;}.box .four{margin-left:60px;}.box .two,.box .three,.box .four{display:none;}</style> </head> <body><div class='box' id='box'><ul><li><em></em><span>第一级第一个</span><ul class='two'><li><span>第二级第一个</span></li><li><em></em><span>第二级第二个</span><ul class='three'><li><span>第三极第一个</span></li><li><span>第三极第二个</span></li><li><em></em><span>第三极第三个</span><ul class='four'><li><span>第四级第一个</span></li><li><span>第四级第二个</span></li><li><span>第四级第三个</span></li></ul></li></ul></li><li><em></em><span>第二级第三个</span><ul class='three'><li><span>第三级第一个</span></li><li><span>第三级第二个</span></li><li><span>第三级第三个</span></li></ul></li></ul></li></ul><ul><li><em></em><span>第一级第一个</span><ul class='two'><li><span>第二级第一个</span></li><li><em></em><span>第二级第二个</span><ul class='three'><li><span>第三极第一个</span></li><li><span>第三极第二个</span></li><li><em></em><span>第三极第三个</span><ul class='four'><li><span>第四级第一个</span></li><li><span>第四级第二个</span></li><li><span>第四级第三个</span></li></ul></li></ul></li><li><em></em><span>第二级第三个</span><ul class='three'><li><span>第三级第一个</span></li><li><span>第三级第二个</span></li><li><span>第三级第三个</span></li></ul></li></ul></li></ul></div><script>var box = document.getElementById('box');//把列表中的span(前面有em的span)设置一个 cursor:pointer的样式var spanList = box.getElementsByTagName("span");for(var i = 0;i<spanList.length;i++){var curSpan = spanList[i];var curPre = utils.prev(curSpan);if(curPre && curPre.tagName.toLowerCase()==="em"){curSpan.style.cursor = "pointer"}}//使用事件委托实现我们的操作box.onclick = function(e){e = e || window.event;var tar = e.target || e.srcElement;//只有点击的是em或者span标签,我们才进行展开收缩的操作if(/^(em|span)$/i.test(tar.tagName)){var parent = tar.parentNode;//获取父亲var firstUl = utils.children(parent,"ul")[0]//获取父亲子集中的第一个ul标签var oEm = utils.children(parent,"em")[0]if(firstUl){//如果隐藏让显示,否则让隐藏var isBlock = utils.getCss(firstUl,"display") === "block" ? true : false;if(isBlock){firstUl.style.display = "none";if(oEm){utils.removeClass(oEm,"open")}//当外层的收起,里层所有的ul都要隐藏,所有的em都要移除open样式var allUl = parent.getElementsByTagName("ul"),allEm = parent.getElementsByTagName("em");for(var i = 0;i<allUl.length;i++){allUl[i].style.display = "none";utils.removeClass(allEm[i],"open");}}else{firstUl.style.display = "block";if(oEm){utils.addClass(oEm,"open")}}}}}</script> </body> </html>