练手 js,html5,jquery 弹窗动态创建树形菜单

js,html5,jquery 弹窗动态创建树形菜单

头文件

<head>
<meta name="viewport" content="width=device-width" charset="utf-8"/>
<link rel="stylesheet" href="../../jquery.mobile-1.4.5/jquery.mobile-1.4.5.min.css">
<script src="../../jquery.mobile-1.4.5/demos/js/jquery.min.js"></script>
<script src="../../jquery.mobile-1.4.5/jquery.mobile-1.4.5.min.js"></script>
<script src="../../common.js"></script>
<script src="pdqd.js"></script>
<style>
	.menuTree div {
        padding-left: 20px;
    }

    .menuTree div ul {
        overflow: hidden;
        display: none;
        height: auto;
    }

    .menuTree span {
        display: block;
        height: 25px;
        line-height: 25px;
        padding-left: 5px;
        margin: 1px 0;
        cursor: pointer;
        border-bottom: 1px solid #CCC;
    }

    .menuTree span:hover {
        background-color: #e6e6e6;
        color: #cf0404;
    }

    .btn {
        height: 30px;
        margin-top: 10px;
        border-bottom: 1px solid #CCC;
    }
</style>
</head>

表体

<body>
	<div data-role="popup" id="myPopup" data-theme="a"  data-fullscreen="true"
				class="ui-corner-all"
				data-overlay-theme="b">
				 <div id="menuTree" class="menuTree" style="width:250px" ></div>
		</div>
</body>

js 把数据换成json数据即可,简单又方便。

<script>
<div class="ui-field-contain">
		<div class="ui-grid-a">
	 		<div class="ui-block-a"style="width:25%">存放地点:</div><br>
	 		<div class="ui-block-b" style="width:75%">
					<input data-position-to="window" type="button" name="cfdds" id="cfdds" value="..."
					  		    onclick="doSelectCfdd()" style="width:185px">
			 </div>
		 </div>
	</div>
</div>
function doSelectCfdd() {
	
	// 数据
    var data = [{
                "id": "1",
                "name": "1",
                "fatherId": "0",
            },
            {
                "id": "2",
                "name": "1-1",
                "fatherId": "1"
            },
            {
                "id": "3",
                "name": "1-2",
                "fatherId": "1"
            },
            {
                "id": "4",
                "name": "1-1-1",
                "fatherId": "2"
            },
            {
                "id": "5",
                "name": "1-1-2",
                "fatherId": "2"
            },
            {
                "id": "6",
                "name": "2",
                "fatherId": "0"
            },
            {
                "id": "7",
                "name": "1-2-1",
                "fatherId": "3"
            }
        ];
    
        // 处理数据
        //1、 先把数据处理成map
        const map = {};
        const val = [];
        data.forEach((item) => {
            map[item.id] = item;
        });
        // 2、遍历之后,形成树形结构
        data.forEach((item) => {
            const parent = map[item.fatherId];
            if (parent) {
                (parent.children || (parent.children = [])).push(item);
            } else {
                val.push(item);
            }
        });
    
    /*递归实现获取多级树数据并生成DOM结构*/
    var str = "";
    var forTree = function (o) {
        for (var i = 0; i < o.length; i++) {
            var urlstr = "";
            try {
                urlstr = '<div ><span id='+o[i]["id"]+ '><input type="checkbox" id='+o[i]["name"]+ ' onclick=doSelect('+ o[i]["name"] +')>' + o[i]["name"] + '</span><ul>';               
                str += urlstr;
                if (o[i]["children"] != null) {
                    forTree(o[i]["children"]);
                    
                }
                str += "</ul></div>";
            } catch (e) {}
        }
        return str;
    }

    
    /*添加多级树*/
    document.getElementById("menuTree").innerHTML = forTree(val);
    /*树形菜单*/
    var menuTree = function () {
        //所有父元素加[+-]
        $("#menuTree ul").each(function (index, element) {
            var ulContent = $(element).html();
            var spanContent = $(element).siblings("span").html();
            if (ulContent) {
                $(element).siblings("span").html("[+] " + spanContent)
            }
        });

        $("#menuTree").find("div span").click(function () {
            var ul = $(this).siblings("ul");
            var spanStr = $(this).html();
            var spanContent = spanStr.substr(3, spanStr.length);
            if (ul.find("div").html() != null) {
                if (ul.css("display") == "none") {
                    ul.show(300);
                    $(this).html("[-] " + spanContent);
                } else {
                    ul.hide(300);
                    $(this).html("[+] " + spanContent);
                }
            }
        })
    }()

    /*展开*/
    $("#btn_open").click(function () {
        $("#menuTree ul").show(300);
        curzt("-");
    })
    /*收缩*/
    $("#btn_close").click(function () {
        $("#menuTree ul").hide(300);
        curzt("+");
    })

    function curzt(v) {
        $("#menuTree span").each(function (index, element) {
            var ul = $(this).siblings("ul");
            var spanStr = $(this).html();
            var spanContent = spanStr.substr(3, spanStr.length);
            if (ul.find("div").html() != null) {
                $(this).html("[" + v + "] " + spanContent);
            }
        });
    }
	
	
	//解决多次点击弹出,需要点二次才能除非点击事件
	$('#myPopup').popup('open', {'data-position-to' : 'window', 'data-transition':'fade'}); 
	return false;
}

// 将选中的那一条数据展示在页面中
function doSelect(){
	
	$("#myPopup").popup("close");
	window.setTimeout('$("#myPopup").popup("close");', 500);
	
	var objects = document.getElementsByTagName("input");
	for(i=0;i<objects.length;i++){
		if(objects[i].checked == true){
			var data = objects[i].id;
			$("#cfdds").attr("value",data);
			break;
		}
	}
	
	return false;
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值