关于Jquery-ztree节点查询

最近在用ztree,网上收集了一些ztree但都不完善,目前把完善的树结构查询代码分享一下!微笑奋斗

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
    <title>zTree搜索</title>  
<link rel="stylesheet" href="css/zTree-css/zTreeStyle/zTreeStyle.css" type="text/css" /> 
<link rel="stylesheet" href="js/bootstrap/css/bootstrap.min.css" />
    <script type="text/javascript" src="js/bootstrap/js/jquery.min.js" ></script>

    <script type="text/javascript" src="js/ztree/jquery.ztree.core.js"></script> 
    <script type="text/javascript" src="js/bootstrap.min.js" ></script>
    
    
</head>
<body>
<div class="col-md-3 sidebar">  
    <div class="row">  
    <div class="col-sm-3">业务权限</div>
        <div class="col-sm-9">  
            <input type="text"  id="key" class="empty form-control" placeholder="Search..." οnkeyup="callNumber()"> 
        </div>  
        <div class="row" style="width:90px;position: relative;top:-33px;left:250px;">  
        <div clss="col-sm-12">
        <div class="col-sm-8" style="padding-top:5px;padding-right:-5px;">
                <label id="number"></label>  
                </div>
                <div class="col-sm-4">    
                    <i id="clickUp" class="glyphicon glyphicon-menu-up" οnclick="clickUp()"></i>  
                    <i id="clickDown" class="glyphicon glyphicon-menu-down" οnclick="clickDown()"></i>  
                </div>  
                
           </div>    
        </div>  
    </div>  
    <ul id="tree" class="ztree"></ul>  

</div>  


<script>
$(document).ready(function(){  
  var zNodes=[  
        { id:123456, pId:0, name:"根节点", open:true},   
        { id:1, pId:123456, name:"部门1", open:true},  
        { id:11, pId:1, name:"部门1.1", open:true},  
        { id:111, pId:11, name:"部门1.1.1"},  
        { id:112, pId:11, name:"部门1.1.2"},  
        { id:12, pId:1, name:"部门1.2", open:true},  
        { id:121, pId:12, name:"部门1.2.1"},  
        { id:122, pId:12, name:"部门1.2.2"},  
        { id:123, pId:12, name:"部门1.2.3"},  
        { id:124, pId:12, name:"部门1.2.4"},  
        { id:125, pId:12, name:"部门1.2.5"},  
        { id:126, pId:12, name:"部门1.2.6"},  
        { id:127, pId:12, name:"部门1.2.7"},  
        { id:128, pId:12, name:"部门1.2.8"},  
        { id:2, pId:123456, name:"部门2", checked:true, open:true},  
        { id:21, pId:2, name:"部门2.1"},  
        { id:22, pId:2, name:"部门2.2", open:true},  
        { id:221, pId:22, name:"部门2.2.1", checked:true},  
        { id:222, pId:22, name:"部门2.2.2"},  
        { id:23, pId:2, name:"部门2.3"},  
        { id:24, pId:2, name:"部门2.4"},  
        { id:25, pId:2, name:"部门2.5"},  
        { id:26, pId:2, name:"部门2.6"},  
        { id:27, pId:2, name:"部门2.7"},  
        { id:28, pId:2, name:"部门2.8"},  
        { id:29, pId:2, name:"部门2.9"}  
    ];  
  
    var setting = {   
        data: {  
            simpleData: {  
                enable: true  
            }  
        }  
    };
    $.fn.zTree.init($("#tree"), setting, zNodes);  
    document.getElementById("key").value = ""; //清空搜索框中的内容  
    //绑定事件  
    key = $("#key");  
    key.bind("focus", focusKey)  
        .bind("blur", blurKey)  
        .bind("propertychange", searchNode) //property(属性)change(改变)的时候,触发事件  
        .bind("input", searchNode);  
});  


var lastValue = "", nodeList = [], fontCss = {};  
//键盘释放:当输入框的键盘按键被松开时,把查询到的数据结果显示在标签中  
function callNumber(){  
    var zTree = $.fn.zTree.getZTreeObj("tree");  
  
    //如果结果有值,则显示比例;如果结果为0,则显示"[0/0]";如果结果为空,则清空标签框;  
    if(nodeList.length){  
        //让结果集里边的第一个获取焦点(主要为了设置背景色),再把焦点返回给搜索框  
        zTree.selectNode(nodeList[0],false );  
        document.getElementById("key").focus();  
  
        clickCount=0; //防止重新输入的搜索信息的时候,没有清空上一次记录  
  var num=clickCount+1;
        //显示当前所在的是第一条  
        document.getElementById("number").innerHTML="["+num+"/"+nodeList.length+"]";  
  
    }else if(nodeList.length == 0){  
        document.getElementById("number").innerHTML="[0/0]";  
        zTree.cancelSelectedNode(); //取消焦点  
    }  
  
    //如果输入框中没有搜索内容,则清空标签框  
    if(document.getElementById("key").value ==""){  
        document.getElementById("number").innerHTML="";  
        zTree.cancelSelectedNode();  
    }  
}  
function focusKey(e) {  
    if (key.hasClass("empty")) {  
        key.removeClass("empty");  
    }  
}  
function blurKey(e) {  
    if (key.get(0).value === "") {  
        key.addClass("empty");  
    }  
}  
//搜索节点  
function searchNode(e) {  
    var zTree = $.fn.zTree.getZTreeObj("tree");  
    var value = $.trim(key.get(0).value);  
    var keyType = "name";  
  
    if (key.hasClass("empty")) {  
        value = "";  
    }  
    if (lastValue === value) return;  
    lastValue = value;  
    if (value === ""){  
        updateNodes(false);  
        return;  
    };  
    nodeList = zTree.getNodesByParamFuzzy(keyType, value); //调用ztree的模糊查询功能,得到符合条件的节点  
    updateNodes(true); //更新节点  
}  


//高亮显示被搜索到的节点  
function updateNodes(highlight) {  
    var zTree = $.fn.zTree.getZTreeObj("tree");  
    for( var i=0, l=nodeList.length; i<l; i++) {  
        nodeList[i].highlight = highlight; //高亮显示搜索到的节点(highlight是自己设置的一个属性)  
        zTree.expandNode(nodeList[i].getParentNode(), true, false, false); //将搜索到的节点的父节点展开  
        zTree.updateNode(nodeList[i]); //更新节点数据,主要用于该节点显示属性的更新  
    }  
}  


//点击向上按钮时,将焦点移向上一条数据  
function clickUp(){  
    var zTree = $.fn.zTree.getZTreeObj("tree");  
    //如果焦点已经移动到了最后一条数据上,就返回第一条重新开始,否则继续移动到下一条  
var total=nodeList.length-1;
    if(nodeList.length==0){
        alert("没有搜索结果!");  
        return ;  
    }else if(clickCount==0) { 
        alert("您已位于第一条记录上!");  
        return;  
        //让结果集里边的下一个节点获取焦点(主要为了设置背景色),再把焦点返回给搜索框  
        //zTree.selectNode(nodeList[clickCount], false)  
    }else{  
        //让结果集里边的第一个获取焦点(主要为了设置背景色),再把焦点返回给搜索框  
        clickCount--; 
        zTree.selectNode(nodeList[clickCount], false);
    }  
  
    document.getElementById("key").focus();  
    //显示当前所在的是条数  
    num=clickCount+1;
    document.getElementById("number").innerHTML = "[" + num + "/" + nodeList.length + "]";  
}  
//点击向上按钮时,将焦点移向下一条数据  
function clickDown(){  
    var zTree = $.fn.zTree.getZTreeObj("tree");  
    //如果焦点已经移动到了最后一条数据上,则提示用户(或者返回第一条重新开始),否则继续移动到下一条  
     var total=nodeList.length-1;
    if(nodeList.length==0){
        alert("没有搜索结果!");  
        return ;  
    }else if(total==clickCount)  
    {  
        alert("您已位于最后一条记录上!")  
        return;  
    }else{  
        //让结果集里边的第一个获取焦点(主要为了设置背景色),再把焦点返回给搜索框  
        clickCount ++; 
        zTree.selectNode(nodeList[clickCount], false)
        
    }  
    document.getElementById("key").focus();  
    //显示当前所在的条数  
     num=clickCount+1;
    document.getElementById("number").innerHTML = "[" + num + "/" + nodeList.length + "]";  
}  
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值