读书人

帮忙解释一上上拉菜单的js代码

发布时间: 2012-11-14 10:12:19 作者: rapoo

帮忙解释一下下拉菜单的js代码
我刚学js,好多不东的地方希望大家啊帮忙,尽量详细点!不胜感谢!

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript"></script>
<title>left</title>
<style type="text/css">
body {font-family:Arial, Helvetica, sans-serif;font-size:12px;width:166px;margin:0 auto;}
ul,h5{margin:0;padding:0;list-style:none;}
#levelmenu{margin:8px 0 0 8px;}
#levelmenu div.unit ul{width:127px;border:solid 1px #1A5189;border-top:none;padding:8px 0 8px 20px;}
#levelmenu h5{width:149px;height:25px;line-height:26px;overflow:hidden;background:#515E7B url(http://2.bp.blogspot.com/_bdBPvgEipxw/SSO2rZ3z94I/AAAAAAAAAQE/WH2dc6R8TzQ/s320/menubg.gif) left top no-repeat;text-indent:30px;font-weight:normal;color:#fff;margin:0;font-size:100%;cursor:default;}
#levelmenu div.unit ul{display:none;line-height:23px;}
#levelmenu div.current ul{display:block;}
#levelmenu div.current ul li a{color:#3B475F;text-decoration:none;}
#levelmenu div.current ul li a:hover{text-decoration:underline;}
#levelmenu div.current h5{background-position:left bottom;}
</style>
</head>
<body>
<div id="levelmenu">
<div class="unit current">
<h5>新闻管理</h5>
<ul>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
</ul>
</div>
<div class="unit">
<h5>新闻管理</h5>
<ul>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
</ul>
</div>
<div class="unit">
<h5>新闻管理</h5>
<ul>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
</ul>
</div>
<div class="unit">
<h5>新闻管理</h5>
<ul>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
<li><a href="#">新闻管理</a></li>
</ul>
</div>
</div>
</body>
</html>
<script type="text/javascript">
function init(){
if(!document.getElementById || !document.getElementsByTagName){retun;}
var arrayDiv=document.getElementById("levelmenu");
if(!arrayDiv){return;}
var divObj=arrayDiv.getElementsByTagName("div");
var length=divObj.length;
var agreeDiv=new Array();
for(var i=0;i<length;i++){
if(divObj[i].className.indexOf("unit")>=0){
agreeDiv.push(divObj[i]);
divObj[i].onclick=function(event){


showCurrentMenu(agreeDiv,this,event);
}
}
}
}
function showCurrentMenu(agreeDiv,currentObj,event){
if(!event){event=window.event;}
var eventObj=event.srcElement?event.srcElement:event.target;
var length=agreeDiv.length;
for(var i=0;i<length;i++){
if(eventObj.parentNode==agreeDiv[i] || eventObj.nodeName!="H5"){continue;}
agreeDiv[i].className="unit";
}
if(eventObj.nodeName=="H5"){
if(eventObj.parentNode.className=="unit"){
eventObj.parentNode.className="unit current"
}else{
eventObj.parentNode.className="unit"
}
}
}
init();
</script>

[解决办法]
<script type="text/javascript">
function init(){
//断判是否支持document.getElementById 和 document.getElementsByTagName
if(!document.getElementById || !document.getElementsByTagName){retun;}
var arrayDiv=document.getElementById("levelmenu");
if(!arrayDiv){return;}
var divObj=arrayDiv.getElementsByTagName("div");//这句就是获取到包在ul外面的所有div了 ,是个数组
var length=divObj.length;
var agreeDiv=new Array();
for(var i=0;i <length;i++){
if(divObj[i].className.indexOf("unit")>=0){ //这个条件是说:如果这个div的class里有unit这么个字符串就成立
//其实divObj里的每个div的class都有
agreeDiv.push(divObj[i]);//把这个div压入数组;
divObj[i].onclick=function(event){ //给这个每个 div 添加click事件
showCurrentMenu(agreeDiv,this,event);
}
}
}
}
function showCurrentMenu(agreeDiv,currentObj,event){
if(!event){event=window.event;} //获取事件对象
var eventObj=event.srcElement?event.srcElement:event.target; //获取事件源对象
var length=agreeDiv.length;
for(var i=0;i <length;i++){
if(eventObj.parentNode==agreeDiv[i] || eventObj.nodeName!="H5"){continue;} //parentNode表示父结点
agreeDiv[i].className="unit";
}
if(eventObj.nodeName=="H5"){
if(eventObj.parentNode.className=="unit"){
eventObj.parentNode.className="unit current"
}else{
eventObj.parentNode.className="unit"
}
}
}
init();
</script>

其实我这么解释你可能跟本还不懂这个菜单的运作原理

这个还在结合css,

要学富客户端你最少要懂三样css,js,dom
[解决办法]


楼主注意一下这个图片

读书人网 >JavaScript

热点推荐