亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js一般方法改寫成面向對象方法的無限級折疊菜單示例代碼

2019-11-20 22:34:03
字體:
來源:轉載
供稿:網友
本例是應用別人的例子,原來那位老兄是用一般方法寫成的無限級折疊菜單,在此先感謝他!后來我就通過了一些簡化修改,將原來的例子改成了面向對象的方式,實例中的展開與閉合的小圖標可以自己重新添加,從而更好的查看效果。
復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>很實用的JS+CSS多級樹形展開菜單</title>
<style type="text/css">
body{margin:0;padding:0;font:12px/1.5 Tahoma,Helvetica,Arial,sans-serif;}
ul,li,{margin:0;padding:0;}
ul{list-style:none;}
a{text-decoration: none;}
#root{margin:10px;width:200px;overflow:hidden;}
#root li{line-height:25px;}
#root .rem{padding-left:16px;}
#root .add{background:url(treeico.gif) -4px -31px no-repeat;}
#root .ren{background:url(treeico.gif) -4px -7px no-repeat;}
#root li a{color:#666666;padding-left:5px;outline:none;blr:expression(this.onFocus=this.blur());}
#root .two{padding-left:20px;display:none;}
</style>
</head>
<body>
<ul id="root">
<li>
<label><a href="javascript:;">校訊通</a></label>
<ul class="two">
<li>
<label><a href="javascript:;">沈陽市</a></label>
<ul class="two">
<li>
<label><a href="javascript:;">二小</a></label>
<ul class="two">
<li><label><a href="javascript:;">二年級</a></label></li>
<li>
<label><a href="javascript:;">三年級</a></label>
<ul class="two">
<li>
<label><a href="javascript:;">一班</a></label>
<ul class="two">
<li><label><a href="javascript:;">張三</a></label></li>
<li>
<label><a href="javascript:;">王五</a></label>
<ul class="two">
<li><label><a href="javascript:;">班長</a></label></li>
<li><label><a href="javascript:;">學習委員</a></label></li>
</ul>
</li>
</ul>
</li>
<li><label><a href="javascript:;">實驗班</a></label></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<label><a href="javascript:;">撫順市</a></label>
<ul class="two">
<li><label><a href="javascript:;">二小</a></label></li>
<li><label><a href="javascript:;">一中</a></label></li>
</ul>
</li>
</ul>
</li>
</ul>
<script type="text/javascript" >
/**一般JS方法
function addEvent(el,name,fn){//綁定事件
if(el.addEventListener) return el.addEventListener(name,fn,false);
return el.attachEvent('on'+name,fn);
}
function nextnode(node){//尋找下一個兄弟并剔除空的文本節點
if(!node)return ;
if(node.nodeType == 1)
return node;
if(node.nextSibling)
return nextnode(node.nextSibling);
}
function prevnode(node){//尋找上一個兄弟并剔除空的文本節點
if(!node)return ;
if(node.nodeType == 1)
return node;
if(node.previousSibling)
return prevnode(node.previousSibling);
}
addEvent(document.getElementById('root'),'click',function(e){//綁定點擊事件,使用root根元素代理
e = e||window.event;
var target = e.target||e.srcElement;
var tp = nextnode(target.parentNode.nextSibling);
switch(target.nodeName){
case 'A'://點擊A標簽展開和收縮樹形目錄,并改變其樣式
if(tp&&tp.nodeName == 'UL'){
if(tp.style.display != 'block' ){
tp.style.display = 'block';
prevnode(target.parentNode.previousSibling).className = 'ren'
}else{
tp.style.display = 'none';
prevnode(target.parentNode.previousSibling).className = 'add'
}
}
break;
case 'SPAN'://點擊圖標只展開或者收縮
var ap = nextnode(nextnode(target.nextSibling).nextSibling);
if(ap.style.display != 'block' ){
ap.style.display = 'block';
target.className = 'ren'
}else{
ap.style.display = 'none';
target.className = 'add'
}
break;
}
});
window.onload = function(){//頁面加載時給有孩子結點的元素動態添加圖標
var labels = document.getElementById('root').getElementsByTagName('label');
for(var i=0;i<labels.length;i++){
var span = document.createElement('span');
span.style.cssText ='display:inline-block;height:18px;vertical-align:middle;width:16px;cursor:pointer;';
span.innerHTML = ' '
span.className = 'add';
if(nextnode(labels[i].nextSibling)&&nextnode(labels[i].nextSibling).nodeName == 'UL')
labels[i].parentNode.insertBefore(span,labels[i]);
else
labels[i].className = 'rem'
}
}
**/
//面向對象方法
var Tree = function(o){
this.root = document.getElementById(o);
this.labels = this.root.getElementsByTagName('label');
var that = this;
this.int();
Tree.prototype.addEvent(this.root,'click',function(e){that.treeshow(e)});
}
Tree.prototype = {
int:function(){//初始化頁面,加載時給有孩子結點的元素動態添加圖標
for(var i=0;i<this.labels.length;i++){
var span = document.createElement('span');
span.style.cssText ='display:inline-block;height:18px;vertical-align:middle;width:16px;cursor:pointer;';
span.innerHTML = ' '
span.className = 'add';
if(this.nextnode(this.labels[i].nextSibling)&&this.nextnode(this.labels[i].nextSibling).nodeName == 'UL')
this.labels[i].parentNode.insertBefore(span,this.labels[i]);
else
this.labels[i].className = 'rem'
}
},
treeshow:function(e){
e = e||window.event;
var target = e.target||e.srcElement;
var tp = this.nextnode(target.parentNode.nextSibling);
switch(target.nodeName){
case 'A'://點擊A標簽展開和收縮樹形目錄,并改變其樣式
if(tp&&tp.nodeName == 'UL'){
if(tp.style.display != 'block' ){
tp.style.display = 'block';
this.prevnode(target.parentNode.previousSibling).className = 'ren'
}else{
tp.style.display = 'none';
this.prevnode(target.parentNode.previousSibling).className = 'add'
}
}
break;
case 'SPAN'://點擊圖標只展開或者收縮
var ap = this.nextnode(this.nextnode(target.nextSibling).nextSibling);
if(ap.style.display != 'block' ){
ap.style.display = 'block';
target.className = 'ren'
}else{
ap.style.display = 'none';
target.className = 'add'
}
break;
}
},
addEvent:function(el,name,fn){//綁定事件
if(el.addEventListener) return el.addEventListener(name,fn,false);
return el.attachEvent('on'+name,fn);
},
nextnode:function(node){//尋找下一個兄弟并剔除空的文本節點
if(!node)return ;
if(node.nodeType == 1)
return node;
if(node.nextSibling)
return this.nextnode(node.nextSibling);
},
prevnode:function(node){//尋找上一個兄弟并剔除空的文本節點
if(!node)return ;
if(node.nodeType == 1)
return node;
if(node.previousSibling)
return prevnode(node.previousSibling);
}
}
tree = new Tree("root");//實例化應用
</script>
</body>
</html>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
26uuu另类亚洲欧美日本一| 91大神在线播放精品| www.欧美三级电影.com| 91视频免费网站| 亚洲视频在线观看免费| 精品国产一区二区三区久久狼5月| 欧美wwwwww| 中文字幕亚洲激情| 日韩av片电影专区| 亚洲自拍在线观看| 精品国产视频在线| 日韩最新中文字幕电影免费看| 日本中文字幕久久看| 久久久精品一区| 久久中文久久字幕| 日韩av日韩在线观看| 亚洲人成欧美中文字幕| 国产日韩中文字幕| 欧美激情视频在线| 日日噜噜噜夜夜爽亚洲精品| 2020国产精品视频| 亚洲人永久免费| 国产日产亚洲精品| 亚洲国产97在线精品一区| 国产精品一香蕉国产线看观看| 欧美性少妇18aaaa视频| 在线观看国产精品淫| 国产精品私拍pans大尺度在线| 亚洲电影免费观看高清完整版在线| 亚洲男女自偷自拍图片另类| 国产玖玖精品视频| 少妇高潮久久77777| 日韩中文在线不卡| 97精品一区二区视频在线观看| 中文字幕欧美国内| 日本精品久久久| 欧美国产高跟鞋裸体秀xxxhd| 精品久久香蕉国产线看观看亚洲| 亚洲一区二区免费在线| 91系列在线观看| 在线观看日韩视频| 中文字幕欧美专区| 精品国产乱码久久久久久婷婷| 国产精品偷伦一区二区| 亚洲男人天堂网| 91人成网站www| 国产精品福利无圣光在线一区| 久久精品国产综合| 久久国产精品偷| 亚洲最新av网址| 91黑丝在线观看| 国产精品 欧美在线| 日韩在线视频二区| 高清亚洲成在人网站天堂| 精品一区二区电影| 少妇av一区二区三区| 久久乐国产精品| 欧美成人第一页| 91国产美女在线观看| 色999日韩欧美国产| 正在播放欧美视频| 一二美女精品欧洲| 成人乱人伦精品视频在线观看| 国产亚洲欧洲黄色| 亚洲欧美国产高清va在线播| 亚洲国产精久久久久久久| 日本不卡高字幕在线2019| 亚洲欧美激情在线视频| 欧美日韩精品在线| 亚洲精品成人久久电影| 色综合久综合久久综合久鬼88| 欧美日韩中文字幕综合视频| 有码中文亚洲精品| 久久久久久噜噜噜久久久精品| 日韩电影网在线| 国产精品免费福利| 国内免费精品永久在线视频| 国产午夜精品视频免费不卡69堂| 亚洲2020天天堂在线观看| 神马久久桃色视频| 97精品在线视频| 亚洲女成人图区| 亚洲国产又黄又爽女人高潮的| 久久久精品电影| 亚洲va久久久噜噜噜久久天堂| 久久99精品视频一区97| 亚洲最大av网站| 孩xxxx性bbbb欧美| 久久国内精品一国内精品| 精品动漫一区二区三区| 精品美女国产在线| 国产精品一区二区3区| 亚洲欧美在线一区二区| 色综合伊人色综合网| 久热精品视频在线免费观看| 亚洲人成电影网| 久久综合伊人77777蜜臀| 亚洲人成在线观| 亚洲国产精品嫩草影院久久| 欧美激情精品久久久久久黑人| 亚洲最大av网| 欧美综合一区第一页| 国产97在线播放| 欲色天天网综合久久| 欧美激情性做爰免费视频| 91色视频在线观看| 亚洲精品456在线播放狼人| 日韩av影片在线观看| 超碰日本道色综合久久综合| 亚洲精品456在线播放狼人| 亚洲综合在线做性| 成人免费激情视频| 国产精品揄拍500视频| 日韩欧美一区二区在线| 国产精品视频免费在线观看| 俺也去精品视频在线观看| 欧美一区二区三区艳史| 日韩最新免费不卡| 国产在线观看精品| 国产在线拍偷自揄拍精品| 久久免费精品日本久久中文字幕| 国产一区二区三区视频在线观看| 97精品欧美一区二区三区| 国产精品精品视频一区二区三区| 久久久精品网站| 亚洲激情在线视频| 青青草成人在线| 日韩风俗一区 二区| 日韩免费黄色av| 精品国产欧美成人夜夜嗨| 亚洲国产第一页| 亚洲最大福利视频网| 精品亚洲国产成av人片传媒| 国产女同一区二区| 日韩免费不卡av| 91免费在线视频| 亚洲色图综合久久| 丝袜美腿亚洲一区二区| 狠狠干狠狠久久| 日韩久久午夜影院| 欧美一区亚洲一区| 国产欧美一区二区白浆黑人| 热99久久精品| 久久91精品国产| 国产精品久久久久久影视| 亚洲最大福利视频网站| 久久国产视频网站| 欧美尺度大的性做爰视频| 欧美日韩中文字幕综合视频| 97婷婷大伊香蕉精品视频| 国产欧洲精品视频| 俺去了亚洲欧美日韩| 最新亚洲国产精品| 成人国产精品一区| 久久久这里只有精品视频| 国产精品日日摸夜夜添夜夜av| 亚洲自拍偷拍在线| 亚洲а∨天堂久久精品喷水| 日韩久久午夜影院| 国产精品av在线| 国产精品久久久久久久久久免费| 中文字幕成人在线| 欧美成年人视频网站欧美| 亚洲男人天堂2024|