以下是 jQuery轻量级树状菜单插件代码 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery轻量级树状菜单插件代码</title>
<link href="jquery.treemenu.css" rel="stylesheet" type="text/css">
<style>
*{list-style:none;border:none;}
body{font-family:Arial;background-color:#2C3E50;}
.tree { color:#46CFB0;width:800px;margin:100px auto;}
.tree li,
.tree li > a,
.tree li > span {
padding: 4pt;
border-radius: 4px;
}
.tree li a {
color:#46CFB0;
text-decoration: none;
line-height: 20pt;
border-radius: 4px;
}
.tree li a:hover {
background-color: #34BC9D;
color: #fff;
}
.active {
background-color: #34495E;
color: white;
}
.active a {
color: #fff;
}
.tree li a.active:hover {
background-color: #34BC9D;
}
</style>
</head>
<body>
<ul class="tree">
<li><a href="">Home</a></li>
<li><span>Category</span>
<ul>
<li><a href="#">jQuery</a>
<ul>
<li><a href="#">jQuery</a></li>
<li><a href="#">jQuery UI</a></li>
<li><a href="#">jQuery Mobile</a></li>
</ul>
</li>
<li><a href="#">JavaScript</a>
<ul>
<li><a class="active" href="#">AngularJS</a></li>
<li><a href="#">React</a></li>
<li><a href="#">Backbone</a></li>
</ul>
</li>
<li><a href="#suits">Golang</a></li>
</ul>
</li>
<li><a href="#about">About</a>
<ul>
<li><a href="#">Contact</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Jobs</a>
<ul>
<li><a href="#jobs1">Job 1</a></li>
<li><a href="#jobs2">Job 2</a></li>
<li><a href="#jobs3">Job 3</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<script src="jquery-1.11.2.min.js"></script>
<script src="jquery.treemenu.js"></script>
<script>
$(function(){
$(".tree").treemenu({delay:300}).openActive();
});
</script>
</body>
</html>
JS代码(jquery.treemenu.js):
/* treeMenu - jQuery plugin version:0.4 Copyright 2014 Stepan Krapivin*/
(function($){
$.fn.openActive = function(activeSel){
activeSel = activeSel || ".active";
var c = this.attr("class");
this.find(activeSel).each(function(){
var el = $(this).parent();
while (el.attr("class") !== c){
if(el.prop("tagName") === 'UL'){
el.show();
}
else if (el.prop("tagName") === 'LI'){
el.removeClass('tree-closed');
el.addClass("tree-opened");
}
el = el.parent();
}
}
);
return this;
}
$.fn.treemenu = function(options){
options = options ||{
}
;
options.delay = options.delay || 0;
options.openActive = options.openActive || false;
options.activeSelector = options.activeSelector || "";
this.addClass("treemenu");
this.find("> li").each(function(){
e = $(this);
var subtree = e.find('> ul');
var button = e.find('span').eq(0).addClass('toggler');
if( button.length == 0){
var button = $('<span>');
button.addClass('toggler');
e.prepend(button);
}
else{
button.addClass('toggler');
}
if(subtree.length > 0){
subtree.hide();
e.addClass('tree-closed');
e.find(button).click(function(){
var li = $(this).parent('li');
li.find('> ul').slideToggle(options.delay);
li.toggleClass('tree-opened');
li.toggleClass('tree-closed');
li.toggleClass(options.activeSelector);
}
);
$(this).find('> ul').treemenu(options);
}
else{
$(this).addClass('tree-empty');
}
}
);
if (options.openActive){
this.openActive(options.activeSelector);
}
return this;
}
}
)(jQuery);
CSS代码(jquery.treemenu.css):
/* For treemenu.js */
.treemenu li{list-style:none;}
.treemenu .toggler{cursor:pointer;}
.treemenu .toggler:before{display:inline-block;margin-right:2pt;}
li.tree-empty > .toggler{color:#aaa;}
li.tree-empty > .toggler:before{content:"\2212";}
li.tree-closed > .toggler:before{content:"+";}
li.tree-opened > .toggler:before{content:"\2212";}