DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> js導航菜單(自寫)簡單大方
js導航菜單(自寫)簡單大方
編輯:JavaScript基礎知識     
最近由於項目需要一個簡單的多級下拉菜單菜單但是由於業務和樣式上的要求,為了簡潔,在網上找了很多導航菜單控件都不大適合,所以突發奇想自己寫個吧~該動手就動手啊~
HTML部分
復制代碼 代碼如下: 
<h2>
SuperFish</h2>
<ul class="nav" hid="root">
<li><a href="javascript:void(0)" testid="aa">一級li 1</a>
<ul>
<li><a href="javascript:void(0)" testid="bb">二級 li 1</a></li>
<li><a href="javascript:void(0)" testid="cc">二級 li 2</a>
<ul>
<li><a href="javascript:void(0)" testid="dd">三級 li 1</a></li>
<li><a href="javascript:void(0)" testid="ee">三級 li 2</a></li>
<li><a href="javascript:void(0)" testid="ff">三級 li 3</a></li>
<li><a href="javascript:void(0)" testid="gg">三級 li 4</a></li>
<li><a href="javascript:void(0)" testid="hh">三級 li 5</a></li>
<li><a href="javascript:void(0)" testid="ii">三級 li 6</a>
<ul>
<li><a href="javascript:void(0)" testid="jj">四級 li 1</a></li>
<li><a href="javascript:void(0)" testid="kk">四級 li 2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="javascript:void(0)" testid="ll">二級 li 3</a>
<ul>
<li><a href="javascript:void(0)" testid="mm">三級 li 6</a></li>
<li><a href="javascript:void(0)" testid="nn">三級 li 7</a></li>
<li><a href="javascript:void(0)" testid="oo">三級 li 8</a></li>
<li><a href="javascript:void(0)" testid="pp">三級 li 9</a></li>
<li><a href="javascript:void(0)" testid="qq">三級 li 10</a></li>
</ul>
</li>
<li><a href="javascript:void(0)" testid="rr">二級 li 4</a>
<ul>
<li><a href="javascript:void(0)" testid="ss">三級 li 11</a></li>
<li><a href="javascript:void(0)" testid="tt">三級 li 12</a></li>
<li><a href="javascript:void(0)" testid="uu">三級 li 13</a></li>
<li><a href="javascript:void(0)" testid="vv">三級 li 14</a></li>
<li><a href="javascript:void(0)" testid="ww">三級 li 15</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="javascript:void(0)" testid="xx">一級li 2</a>
<ul>
<li><a href="javascript:void(0)" testid="ss">二級 li 11</a></li>
</ul>
</li>
</ul>

Javascript部分
復制代碼 代碼如下:
<script language="javascript" type="text/javascript">
var navigationBar = function () {
//使用時將testid屬性換成href屬性即可
var currentUrlHref = "jj";
var root = $("ul[hid='root']");
$(root).find(">li").attr("first_level", true);
$(root).find(">li>a").addClass("nav_first_style");
//遞歸向下查找可展開元素並且綁定toggle展開事件
var searchChildren = function (root) {
if (root.find(">li").length > 0) {
$(root).addClass("ul_style");
var liChildren = root.find(">li");
$(liChildren).each(function (idx, item) {
searchChildren($(item));
})
} else if (root.find(">ul").length > 0) {
$(root).addClass("li_style");
if ($(root).attr("first_level") != true.toString()) {
$(root).find(">a").addClass("li_style_a");
}
var aLink = $(root).find(">a");
//初始裝載的時候判斷當前url是不是和導航欄中的東西匹配
if (currentUrlHref == $(aLink).attr("testid")) {
findInitPosition(aLink);
}
$(aLink).toggle(function () {
$(this).addClass("li_style_a_selected");
$(this).parent().find(">ul").show("fast");
//隱藏非一級節點下的所有兄弟元素
if ($(this).parent().attr("first_level") != true.toString()) {
$(this).parent().siblings().find(">a").removeClass("li_style_a_selected");
$(this).parent().siblings().each(function (idx, item) {
removeClassAndHide(item);
})
} else {
$(this).addClass("nav_first_style_selected");
$(this).removeClass("li_style_a_selected");
$(this).parent().siblings().find(">a").removeClass("nav_first_style_selected");
$(this).parent().siblings().each(function (idx, item) {
removeClassAndHide(item);
})
}
}, function () {
if ($(this).parent().attr("first_level") == true.toString()) {
$(this).addClass("nav_first_style_selected");
$(this).parent().siblings().find(">a").removeClass("nav_first_style_selected");
}
removeClassAndHide($(this).parent());
})
var ulChildren = root.find(">ul");
$(ulChildren).each(function (idx, item) {
$(item).hide();
searchChildren($(item));
});
} else {
if ($(root).attr("first_level") != true.toString()) {
$(root).find(">a").addClass("li_style_a");
}
$(root).addClass("li_style");
$(root).click(function () {
if ($(root).attr("first_level") != true.toString()) {
$(this).find(">a").addClass("li_style_a_selected");
$(this).siblings().find(">a").removeClass("li_style_a_selected");
$(this).siblings().each(function (idx, item) {
removeClassAndHide(item);
addFirstLevelClass(item);
})
} else {
$(this).find(">a").addClass("nav_first_style_selected");
$(this).find(">a").removeClass("li_style_a_selected");
$(this).siblings().find(">a").removeClass("nav_first_style_selected");
removeClassAndHide(this);
}
})
if (currentUrlHref == $(root).find(">a").attr("testid")) {
findInitPosition($(root).find(">a"));
}
}
}
//遞歸查找初始位置
var findInitPosition = function (aLink) {
var currentLi = $(aLink).parent();
if ($(currentLi).parent().parent().find(">a").length > 0) {
findInitPosition($(currentLi).parent().parent().find(">a"));
}
if ($(currentLi).find(">ul").length > 0) {
$(currentLi).find(">ul").show("fast");
}
if ($(currentLi).attr("first_level") != true.toString()) {
$(currentLi).find(">a").addClass("li_style_a_selected");
} else {
$(currentLi).find(">a").addClass("nav_first_style_selected");
}
}
//遞歸向下刪除所有子節點的選中樣式
var removeClassAndHide = function (li) {
if ($(li).attr("first_level") != true.toString()) {
$(li).find(">a").removeClass("li_style_a_selected");
$(li).find(">ul").hide("fast");
if ($(li).find(">ul").length > 0) {
$(li).find(">ul>li").each(function (idx, item) {
removeClassAndHide(item);
});
}
} else if ($(li).attr("first_level") == true.toString()) {
$(li).find(">ul").hide("fast");
$(li).find(">ul>li").each(function (idx, item) {
removeClassAndHide(item);
})
} else {
$(li).find(">ul").show("fast");
$(li).find(">ul>li").each(function (idx, item) {
removeClassAndHide(item);
})
}
}
//遞歸向上添加第一層節點樣式
var addFirstLevelClass = function (li) {
if ($(li).attr("first_level") != true.toString()) {
addFirstLevelClass($(li).parent().parent());
} else {
if (!$(li).find(">a").hasClass("nav_first_style_selected")) {
$(li).find(">a").addClass("nav_first_style_selected");
$(li).siblings().find(">a").removeClass("nav_first_style_selected");
}
}
}
//創建導航
var createNav = function () {
searchChildren(root);
}
createNav();
}
var initNav = new navigationBar();
</script>

不過暫時還沒有封裝成類似jquery的寫法,其實還可以繼續封成一個控件~
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved