[JavaScript]树形菜单 DOM 脚本编程实例

晚上参考了网上的三级菜单的脚本写了个代码。效果为点击上级父菜单栏后,下级子菜单栏显示或是隐藏。
DOM 树型结构代码:

Code
<div id="menu">
<h3>论坛首页</h3>
<ul>
<li class="childNode1">
<a href="#">市场调查</a>
<ul>
<li>
<a href="#">子栏目</a>
<ul>
<li>
<a href="#">二级子栏目</a>
<ul>
<li>
<a href="#">三级子栏目</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="">子栏目</a>
</li>
</ul>
</li>
<li class="childNode2"><a href="">会员讨论区</a></li>
<li class="childNode3"><a href="">趣味派派对</a></li>
<li class="childNode4"><a href="">伊人时尚</a></li>
<li class="childNode5"><a href="">超级水水吧</a></li>
<li class="childNode6"><a href="">行业信息转载</a></li>
<li class="childNode7"><a href="">会员事务受理区</a></li>
<li class="childNode8"><a href="">最新消息</a></li>
<li class="childNode9"><a href="">历史备案</a></li>
<li class="childNode10"><a href="">使用说明</a></li>
</ul>
</div>
<!-- end menu -->

JavaScript 程序代码:

1function prepareMenuBar() {
2    menuBar('menu');
3}

4function menuBar(id) {
5    if(!document.getElementById || !document.getElementsByTagName ) return;
6    var oId = document.getElementById(id);
7    if(!oId) return;
8    var oList = oId.getElementsByTagName('ul');
9    var oLink = oId.getElementsByTagName('a');
10   
11    for(var i=0; i<oLink.length; i++) {
12        oLink[i].onclick = function() {
13            if(this.nextSibling.nextSibling.style.display == 'block'){
14                this.nextSibling.nextSibling.style.display = 'none';
15            }

16            else {
17                this.nextSibling.nextSibling.style.display = 'block';
18            }

19           
20            return false;
21        }
;
22       
23    }

24    for(var j=0; j<oList.length; j++) {
25        oList[j].style.display = 'none';
26    }

27    oList[0].style.display = 'block';
28}
 
29
30addLoadEvent(prepareMenuBar);


我们先通过DOM遍历找到该父节点的元素,再找出子节点元素,再DOM遍历,再这样下去,虽然这样可以编写出三级菜单,但这种编写方法还不够灵活,要知道:for遍历DOM节点是拖耗Web性能的。PPK说:你这样写是不行滴!要编写出更好的方法,先把目标事件对象弄清楚。偷偷告诉你哦:想不想用JavaScript写个无限级联的菜单?打住!这里暂且只写出三级菜单先。本人编写的 JavaScript 代码如下:

if(!document.getElementById || !document.getElementsByTagName) return;
var oId = document.getElementById(id);
if(!oId) return;

var oLink = oId.getElementsByTagName('a');

for(var i=0; i<oLink.length; i++) {
oLink[i].onclick
= function(e) {
var evt = window.event || e;
var evtTarget = evt.target || evt.srcElement;

var node = evtTarget.nextSibling;
while(node.nodeType != 1 && node.nextSibling != null) {
node
= node.nextSibling;
}

if(node.nodeName == 'UL'){
if(node.style.display == 'block') {
node.style.display
= 'none';
}
else {
node.style.display
= 'block';
}
}
return false;
};
}

不好意思,其实早就通过《PPK谈Javascript》学会了,可一直没时间写,现在分享给大家。enjoy!

posted on 2008-10-03 20:01  豆豆の爸爸  阅读(1436)  评论(1编辑  收藏  举报