在做機場項目的時候,業務為一個input框,點擊的時候出現一個下拉樹,這個下拉樹是所有的設備,由於設備太多,加上分了區域,為了更好的用戶體驗,設計一個模糊搜索的功能,方便用戶進行選擇
具體實現過程如下:
第一步:ui設計 一個input輸入框,用於輸入用,下方一個div或者是一個ul用於ztree樹用
<ul class="list">
<li class="title"> 城市:<input id="citySel" type="text" value="" onkeyup="AutoMatch(this)"
style="width: 120px;" />
</li>
</ul>
<div id="menuContent" class="menuContent" style="display: none; position: absolute;">
<ul id="treeDemo" class="ztree" style="margin-top: 0; width: 110px;">
</ul>
</div>
第二步:監聽鍵盤彈起事件,獲取input里面的內容,用ztree提供的api(也可以自己寫方法),匹配到符合條件的ztree樹,然后重構一次下拉樹
///根據文本框的關鍵詞輸入情況自動匹配樹內節點 進行模糊查找 function AutoMatch(txtObj) { if (txtObj.value.length > 0) { InitialZtree(); var zTree = $.fn.zTree.getZTreeObj("treeDemo"); var nodeList = zTree.getNodesByParamFuzzy("name", txtObj.value); //將找到的nodelist節點更新至Ztree內 $.fn.zTree.init($("#treeDemo"), setting, nodeList); showMenu(); } else { //隱藏樹 //hideMenu(); InitialZtree(); } }
第三步:樹子節點的點擊事件,將點擊的內容填充input輸入框
//點擊某個節點 然后將該節點的名稱賦值值文本框 function onClick(e, treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); //獲得選中的節點 var nodes = zTree.getSelectedNodes(), v = ""; //根據id排序 nodes.sort(function compare(a, b) { return a.id - b.id; }); for (var i = 0, l = nodes.length; i < l; i++) { if(i!==0){ v +=","+nodes[i].name ; } v +=nodes[i].name; } //將選中節點的名稱顯示在文本框內 var cityObj = $("#citySel"); cityObj.attr("value", v); //隱藏zTree hideMenu(); return false; }

完整代碼:
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE> ZTREE DEMO - Simple Data</TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
<style type="text/css">
ul,li{margin:0;padding:0}
li{list-style:none}
ul.list,#menuContent{width:183px;border:1px solid #ddd;}
</style>
</HEAD>
<BODY>
<h1>最簡單的樹 -- 簡單 JSON 數據</h1>
<h6>[ 文件路徑: core/simpleData.html ]</h6>
<ul class="list">
<li class="title"> 城市:<input id="citySel" type="text" value="" onkeyup="AutoMatch(this)"
style="width: 120px;" />
</li>
</ul>
<div id="menuContent" class="menuContent" style="display: none; position: absolute;">
<ul id="treeDemo" class="ztree" style="margin-top: 0; width: 110px;">
</ul>
</div>
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
<!-- <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
<SCRIPT type="text/javascript">
var setting = {
view: {
selectedMulti: false //是否允許多選
},
data: {
simpleData: {
enable: true
}
},
callback: {
//zTree節點的點擊事件
onClick: onClick
}
};
//Ztree的初始數據
var zNodes = [
{ id: 1, pId: 0, name: "北京" },
{ id: 2, pId: 0, name: "天津" },
{ id: 3, pId: 0, name: "上海" },
{ id: 6, pId: 0, name: "重慶" },
{ id: 4, pId: 0, name: "河北省", open: true },
{ id: 41, pId: 4, name: "石家庄" },
{ id: 42, pId: 4, name: "保定" },
{ id: 43, pId: 4, name: "邯鄲" },
{ id: 44, pId: 4, name: "承德" },
{ id: 5, pId: 0, name: "廣東省", open: true },
{ id: 51, pId: 5, name: "廣州" },
{ id: 52, pId: 5, name: "深圳" },
{ id: 53, pId: 5, name: "東莞" },
{ id: 54, pId: 5, name: "佛山" },
{ id: 6, pId: 0, name: "福建省", open: true },
{ id: 61, pId: 6, name: "福州" },
{ id: 62, pId: 6, name: "廈門" },
{ id: 63, pId: 6, name: "泉州" },
{ id: 64, pId: 6, name: "三明" }
];
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
initEvent();
hideMenu();
});
//點擊某個節點 然后將該節點的名稱賦值值文本框
function onClick(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
//獲得選中的節點
var nodes = zTree.getSelectedNodes(),
v = "";
//根據id排序
nodes.sort(function compare(a, b) { return a.id - b.id; });
for (var i = 0, l = nodes.length; i < l; i++) {
if(i!==0){
v +=","+nodes[i].name ;
}
v +=nodes[i].name;
}
//將選中節點的名稱顯示在文本框內
var cityObj = $("#citySel");
cityObj.attr("value", v);
//隱藏zTree
hideMenu();
return false;
}
//顯示樹
function showMenu() {
var cityObj = $("#citySel");
var cityOffset = $("#citySel").offset();
//$("#menuContent").css({ left: cityOffset.left + "px", top: cityOffset.top + cityObj.outerHeight() + "px" }).slideDown("fast");
$("#menuContent").slideDown("fast");
}
//隱藏樹
function hideMenu() {
$("#menuContent").fadeOut("fast");
//$("body").unbind("mousedown", onBodyDown);
}
//還原zTree的初始數據
function InitialZtree() {
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
}
///根據文本框的關鍵詞輸入情況自動匹配樹內節點 進行模糊查找
function AutoMatch(txtObj) {
if (txtObj.value.length > 0) {
InitialZtree();
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
var nodeList = zTree.getNodesByParamFuzzy("name", txtObj.value);
//將找到的nodelist節點更新至Ztree內
$.fn.zTree.init($("#treeDemo"), setting, nodeList);
showMenu();
} else {
//隱藏樹
//hideMenu();
InitialZtree();
}
}
function initEvent(){
//鼠標獲得焦點的時候,顯示所有的樹
$("#citySel").focus(function(){
$("#citySel").css("background-color","#FFFFCC");
showMenu();
});
//鼠標失去焦點的時候,隱藏
/* $("#citySel").blur(function(){
$("#citySel").css("background-color","#fff");
hideMenu();
});*/
}
</SCRIPT>
</BODY>
</HTML>
案例二:

充電樁項目代碼 estationMain.js
//注:groupName為輸入框,stationCon為下面顯示的div樹 //點擊輸入框 $('#groupName').on('click',function(){ var stationObj = $("#groupName"); var stationOffset = $("#groupName").offset(); $("#stationCon").css({left:stationOffset.left + "px", top:stationOffset.top + stationObj.outerHeight() + "px"}).slideDown("fast"); //對齊 $("body").bind("mousedown", onBodyDown); //為body綁定事件 }) function hideStation() { $("#stationCon").fadeOut("fast"); $("body").unbind("mousedown", onBodyDown); } function onBodyDown(event) { //判斷只要點擊的目標對象不是樹自己就隱藏,同時解除事件綁定 if (!(event.target.id == "menuBtn" || event.target.id == "stationCon" || $(event.target).parents("#stationCon").length>0)) { hideStation(); } } $.fn.zTree.init($("#tree"), setting, zNodes);
