js導覽功能表(自寫)簡單大方

來源:互聯網
上載者:User

最近由於項目需要一個簡單的多級下拉式功能表菜單但是由於業務和樣式上的要求,為了簡潔,在網上找了很多導覽功能表控制項都不大適合,所以突發奇想自己寫個吧~該動手就動手啊~
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的寫法,其實還可以繼續封成一個控制項~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.