jquery 实现树形菜单 【更新】

1 修改了线条图片样式

2 增加了文字点击函数

先上图:


贴代码:


ul2tree.html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>ul2tree</title>
<style type="text/css">
	body{font-family:"微软雅黑" verdana;}
	#div_tree{display:block; float:left; width:50%; }
	img{vertical-align:bottom;}
</style>
<script type="text/javascript" src="../jquery-1.8.0.min.js" ></script>
<script type="text/javascript" src="ul2tree.0.1.1.js" ></script>
</head>
<body>
<div id="div_tree">
	<ul>
		<li>第一条</li>
		<ul>
			<li>二级一条</li>
			<li>二级二条</li>
			<li>二级三条</li>
		</ul>
		<li>第二条</li>
		<ul>
			<li>第二条二级一</li>
			<li>第二条二级二</li>
			<ul>
				<li>三级一条</li>
				<li>三级二条</li>
				<ul>
					<li>三级一条</li>
					<li>三级二条</li>
						<ul>
							<li>four one</li>
							<li>four two</li>
						</ul>
					<li>三级三条</li>
				</ul>
				<li>三级三条</li>
				<ul>
					<li>三级一条</li>
					<li>三级二条</li>
						<ul>
							<li>four one</li>
							<li>four two</li>
						</ul>
				</ul>
				<li>三级四条</li>
				<ul>
					<li>三级一条</li>
					<li>三级二条</li>
						<ul>
							<li>four one</li>
							<li>four two</li>
						</ul>
					<li>三级三条</li>
				</ul>
			</ul>
		</ul>
		<li>第三条</li>
		<li>第四条</li>
		<ul>
			<li>二级一条</li>
			<li>二级二条</li>
			<li>二级三条</li>
		</ul>
	</ul>
</div>

<script type="text/javascript" >

	$(document).ready(function(){
	
		$.ul2tree({
			obj:$("#div_tree ul"),
			clickFun:function(obj){
				alert($(obj).text());
				$(obj).css({
					"background":"red"
				});
			}
		});
	});
</script>
</body>
</html>



ul2tree.0.1.1.js

/**
* 将ul结构转化为树形菜单函数
* 待解决问题:
* 1 异步加载
* 2 
* 3 
* 4 
*/
$.extend({
	ul2tree:function(opt,callback){
	// 默认参数
	this.defaults = {
		obj           :"",
		img_width     :"18px", // 图片宽度
		line_height   :"18px", // 行高
		font_size     :"12px", // 字体大小
		clickFun      :false, // 文字点击函数,带一个参数,是<li />节点,点击事件的目标节点是<li />下的<span />标签
		isLineImg     :true, // 是否使用线形图片
		forderOpen    :"images/folderOpen.gif", // 打开的文件夹图片
		forderClosed  :"images/folderClosed.gif", // 关闭的文件夹图片
		fileImg       :"images/leaf.gif", // 文件图片
		blankImg      :"images/blank.gif", // 空白占位图片
		lineImg1      :"images/line1.gif", // 竖线图片
		lineImg2      :"images/line2.gif", // └ 线图片
		lineImg3      :"images/line3.gif", // ├ 线图片
		lineImg4      :"images/line4.gif" // ┌ 线图片
	};
	
	//参数初始化
	var opts = $.extend(this.defaults,opt);
	
	// ul样式初始化
	$(opts.obj).css({
		"list-style-type":"none",
		"padding-left":"0px"
	});
	
	// 添加文件夹及文件图片
	$(opts.obj).find("li").each(function(){
		$(this).css({
			"height":opts.line_height,
			"line-height":opts.line_height,
			"font-size":opts.font_size
		});
		
		// 增加文字点击函数
		if(opts.clickFun){
			$(this).html("<span>" + $(this).text() + "</span>");
			$(this).find("span").click(function(){
				opts.clickFun($(this).parent());
			});
		}
		
		// 增加节点图片
		if($(this).next().children().size() > 0){
			$(this).prepend("<img src=\"" + opts.forderOpen + "\" />");
			
			// 节点图片动作展开关闭
			$(this).find("img[src='" + opts.forderOpen + "']:last").click(function(){
				if($(this).attr("src")==opts.forderClosed){
					$(this).attr("src",opts.forderOpen);
					$(this).parent().next().css({
						"display":"block",
						"visibility":"visible"
					});
				}else{
					$(this).parent().next().css({
						"display":"none",
						"visibility":"hidden"
					});
					$(this).attr("src",opts.forderClosed);
				}
			});
		}else{
			$(this).prepend("<img src=\"" + opts.fileImg + "\" />");
		}
	});
	
	// 判断是否使用线条图片
	if(opts.isLineImg){
		// 增加线条
		$(opts.obj).parent().find("ul").each(function(){
			$(this).find("li").each(function(){
				$(this).prepend("<img src=\"images/line3.gif\" />");
				if($(this).next().size == 0){
					alert("");
					$(this).prepend("<img src=\"images/line2.gif\" />");
				}
			});
		});
		
		// 处理线条
		$(opts.obj).parent().find("li").each(function(){
			var img_size = $(this).find("img").size();
			//alert(img_size);
			if(img_size >= 0){
				for(var i = 0; i < img_size - 2; i++){
					$(this).find("img:eq(" + i + ")").attr("src",opts.lineImg1);
				}
			}
		});
		
		// 处理根节点的线条样式
		$(opts.obj).find("li").first().find("img[src='" + opts.lineImg3 + "']:last").attr("src", opts.lineImg4);
		
		// 处理各级目录以 li 结尾的线条样式
		$(opts.obj).find("li").each(function(){
			if($(this).next().size() == 0){
				$(this).find("img[src='" + opts.lineImg3 + "']:first").attr("src", opts.lineImg2);
			}
		});
		
		// 处理各级目录以 ul 结尾的线条样式
		$(opts.obj).find("ul").each(function(){
			if($(this).next().size() == 0){
				$(this).prev().find("img[src='" + opts.lineImg3 + "']:first").attr("src", opts.lineImg2);
				
				// 添加空白占位图片
				var size = $(this).children().first().find("img").size() - 3;
				$(this).find("li").each(function(){
					$(this).find("img:eq(" + size + ")").attr("src",opts.blankImg);
				});
			}
		});
	}else{
		// 不适用线条图片时,使用空白分出级别
		$(opts.obj).find("ul").each(function(){
			$(this).css({
				"padding-left":opts.img_width
			});
		});
	}
}});


文件下载:http://download.csdn.net/detail/blatar/4723097

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值