jquery ztree實現(xiàn)模糊搜索功能
本文分享了jquery ztree實現(xiàn)模糊搜索功能兩個實例,供大家參考,具體內(nèi)容如下
ztree官方demo代碼里的:
根據(jù)參數(shù)查找節(jié)點
以上文件修改成如下代碼
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE> ZTREE DEMO - getNodeByParam / getNodesByParam / getNodesByParamFuzzy</TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../css/demo.css" type="text/css">
<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exhide-3.5.js"></script>
<!--<script type="text/javascript" src="../../../js/jquery.ztree.excheck-3.5.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit-3.5.js"></script>-->
<SCRIPT type="text/javascript">
var setting = {
data: {
key: {
title: "t"
},
simpleData: {
enable: true
}
}
};
var zNodes =[
{ id:1, pId:0, name:"節(jié)點屬性搜索演示 1", t:"id=1"},
{ id:11, pId:1, name:"關(guān)鍵字可以是名字", t:"id=11"},
{ id:12, pId:1, name:"關(guān)鍵字可以是level", t:"id=12"},
{ id:13, pId:1, name:"關(guān)鍵字可以是id", t:"id=13"},
{ id:14, pId:1, name:"關(guān)鍵字可以是各種屬性", t:"id=14"},
{ id:2, pId:0, name:"節(jié)點搜索演示 2", t:"id=2"},
{ id:21, pId:2, name:"可以只搜索一個節(jié)點", t:"id=21"},
{ id:22, pId:2, name:"可以搜索節(jié)點集合", t:"id=22"},
{ id:23, pId:2, name:"搜我吧", t:"id=23"},
{ id:3, pId:0, name:"節(jié)點搜索演示 3", t:"id=3"},
{ id:31, pId:3, name:"我的 id 是: 31", t:"id=31"},
{ id:32, pId:31, name:"我的 id 是: 32", t:"id=32"},
{ id:33, pId:32, name:"我的 id 是: 33", t:"id=33"}
];
function focusKey(e) {
if (key.hasClass("empty")) {
key.removeClass("empty");
}
}
function blurKey(e) {
if (key.get(0).value === "") {
key.addClass("empty");
}
}
var lastValue = "", nodeList = [], fontCss = {};
function clickRadio(e) {
lastValue = "";
searchNode(e);
}
function searchNode(e) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
if (!$("#getNodesByFilter").attr("checked")) {
var value = $.trim(key.get(0).value);
var keyType = "";
if ($("#name").attr("checked")) {
keyType = "name";
} else if ($("#level").attr("checked")) {
keyType = "level";
value = parseInt(value);
} else if ($("#id").attr("checked")) {
keyType = "id";
value = parseInt(value);
}
if (key.hasClass("empty")) {
value = "";
}
if (lastValue === value) return;
lastValue = value;
if (value === "") {
zTree.showNodes(zTree.transformToArray(zTree.getNodes())) ;
return;
}
if ($("#getNodeByParam").attr("checked")) {
var node = zTree.getNodeByParam(keyType, value);
if (node === null) {
nodeList = [];
} else {
nodeList = [node];
}
} else if ($("#getNodesByParam").attr("checked")) {
nodeList = zTree.getNodesByParam(keyType, value);
} else if ($("#getNodesByParamFuzzy").attr("checked")) {
nodeList = zTree.getNodesByParamFuzzy(keyType, value);
}
} else {
updateNodes(false);
nodeList = zTree.getNodesByFilter(filter);
}
/**不查詢父級
for(var x = 0 ; x<nodeList.length ; x++){
if(nodeList[x].isParent){
nodeList.splice(x--,1);
}
}
*/
nodeList = zTree.transformToArray(nodeList);
updateNodes(true);
}
function updateNodes(highlight) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
var allNode = zTree.transformToArray(zTree.getNodes());
zTree.hideNodes(allNode);
for(var n in nodeList){
findParent(zTree,nodeList[n]);
}
zTree.showNodes(nodeList);
}
function findParent(zTree,node){
zTree.expandNode(node,true,false,false);
var pNode = node.getParentNode();
if(pNode != null){
nodeList.push(pNode);
findParent(zTree,pNode);
}
}
function getFontCss(treeId, treeNode) {
return (!!treeNode.highlight) ? {color:"#A60000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
}
function filter(node) {
return !node.isParent && node.isFirstNode;
}
var key;
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
key = $("#key");
key.bind("focus", focusKey)
.bind("blur", blurKey)
.bind("propertychange", searchNode)
.bind("input", searchNode);
$("#name").bind("change", clickRadio);
$("#level").bind("change", clickRadio);
$("#id").bind("change", clickRadio);
$("#getNodeByParam").bind("change", clickRadio);
$("#getNodesByParam").bind("change", clickRadio);
$("#getNodesByParamFuzzy").bind("change", clickRadio);
$("#getNodesByFilter").bind("change", clickRadio);
});
</SCRIPT>
</HEAD>
<BODY>
<h1>根據(jù)參數(shù)查找節(jié)點</h1>
<h6>[ 文件路徑: core/searchNodes.html ]</h6>
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div>
<div class="right">
<ul class="info">
<li class="title"><h2>1、getNodeByParam / getNodesByParam / getNodesByParamFuzzy 方法操作說明</h2>
<ul class="list">
<li class="highlight_red">使用 zTreeObj.getNodeByParam / getNodesByParam / getNodesByParamFuzzy / getNodeByTId 方法,詳細請參見 API 文檔中的相關(guān)內(nèi)容</li>
<li><p>搜索試試看:<br/>
屬性值( value ):<input type="text" id="key" value="" class="empty" /><br/>
屬性( key ):<input type="radio" id="name" name="keyType" class="radio first" checked /><span>name (string)</span><br/>
<input type="radio" id="level" name="keyType" class="radio" style="margin-left:68px;" /><span>level (number) ... 根節(jié)點 level = 0</span><br/>
<input type="radio" id="id" name="keyType" class="radio" style="margin-left:68px;" /><span>id (number)</span><br/>
方法:<input type="radio" id="getNodeByParam" name="funType" class="radio first" /><span>getNodeByParam</span><br/>
<input type="radio" id="getNodesByParam" name="funType" class="radio" style="margin-left:36px;" /><span>getNodesByParam</span><br/>
<input type="radio" id="getNodesByParamFuzzy" name="funType" class="radio" style="margin-left:36px;" checked /><span>getNodesByParamFuzzy (only string)</span><br/>
<input type="radio" id="getNodesByFilter" name="funType" class="radio" style="margin-left:36px;" /><span>getNodesByFilter (參考本頁源碼中 function filter)</span><br/>
</p>
</li>
</ul>
</li>
<li class="title"><h2>2、setting 配置信息說明</h2>
<ul class="list">
<li>不需要對 setting 進行特殊設(shè)置</li>
</ul>
</li>
<li class="title"><h2>3、treeNode 節(jié)點數(shù)據(jù)說明</h2>
<ul class="list">
<li class="highlight_red">請注意各個方法使用時保證傳入查找的參數(shù)類型與設(shè)定要查找的屬性的類型一致</li>
</ul>
</li>
</ul>
</div>
</div>
</BODY>
</HTML>
這樣就簡單的實現(xiàn)了模糊搜索顯示的功能了。
第二個Ztree樹結(jié)構(gòu)模糊搜索實現(xiàn)方法,具體內(nèi)容如下

function expand_ztree(treeId){
var treeObj = $.fn.zTree.getZTreeObj(treeId);
treeObj.expandAll(true);
}
function close_ztree(treeId){
var treeObj = $.fn.zTree.getZTreeObj(treeId);
var nodes = treeObj.transformToArray(treeObj.getNodes());
var nodeLength = nodes.length;
for (var i = 0; i < nodeLength; i++) {
if (nodes[i].id == '0') {
//根節(jié)點:展開 treeObj.expandNode(nodes[i], true, true, false);
} else {
//非根節(jié)點:收起 treeObj.expandNode(nodes[i], false, true, false);
}
}
}
function search_ztree(treeId, searchConditionId){
searchByFlag_ztree(treeId, searchConditionId, "");
}
function searchByFlag_ztree(treeId, searchConditionId, flag){
//<1>.搜索條件 var searchCondition = $('#' + searchConditionId).val();
//<2>.得到模糊匹配搜索條件的節(jié)點數(shù)組集合 var highlightNodes = new Array();
if (searchCondition != "") {
var treeObj = $.fn.zTree.getZTreeObj(treeId);
highlightNodes = treeObj.getNodesByParamFuzzy("name", searchCondition, null);
}
//<3>.高亮顯示并展示【指定節(jié)點s】 highlightAndExpand_ztree(treeId, highlightNodes, flag);
}
function highlightAndExpand_ztree(treeId, highlightNodes, flag){
var treeObj = $.fn.zTree.getZTreeObj(treeId);
//<1>. 先把全部節(jié)點更新為普通樣式 var treeNodes = treeObj.transformToArray(treeObj.getNodes());
for (var i = 0; i < treeNodes.length; i++) {
treeNodes[i].highlight = false;
treeObj.updateNode(treeNodes[i]);
}
//<2>.收起樹, 只展開根節(jié)點下的一級節(jié)點 close_ztree(treeId);
//<3>.把指定節(jié)點的樣式更新為高亮顯示,并展開 if (highlightNodes != null) {
for (var i = 0; i < highlightNodes.length; i++) {
if (flag != null && flag != "") {
if (highlightNodes[i].flag == flag) {
//高亮顯示節(jié)點,并展開 highlightNodes[i].highlight = true;
treeObj.updateNode(highlightNodes[i]);
//高亮顯示節(jié)點的父節(jié)點的父節(jié)點....直到根節(jié)點,并展示 var parentNode = highlightNodes[i].getParentNode();
var parentNodes = getParentNodes_ztree(treeId, parentNode);
treeObj.expandNode(parentNodes, true, false, true);
treeObj.expandNode(parentNode, true, false, true);
}
} else {
//高亮顯示節(jié)點,并展開 highlightNodes[i].highlight = true;
treeObj.updateNode(highlightNodes[i]);
//高亮顯示節(jié)點的父節(jié)點的父節(jié)點....直到根節(jié)點,并展示 var parentNode = highlightNodes[i].getParentNode();
var parentNodes = getParentNodes_ztree(treeId, parentNode);
treeObj.expandNode(parentNodes, true, false, true);
treeObj.expandNode(parentNode, true, false, true);
}
}
}
}
function getParentNodes_ztree(treeId, node){
if (node != null) {
var treeObj = $.fn.zTree.getZTreeObj(treeId);
var parentNode = node.getParentNode();
return getParentNodes_ztree(treeId, parentNode);
} else {
return node;
}
}
function setFontCss_ztree(treeId, treeNode) {
if (treeNode.id == 0) {
//根節(jié)點 return {color:"#333", "font-weight":"bold"};
} else if (treeNode.isParent == false){
//葉子節(jié)點 return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#660099", "font-weight":"normal"};
} else {
//父節(jié)點 return (!!treeNode.highlight) ? {color:"#ff0000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"};
}
}
//==============HTML==============
class="padd" style="padding-bottom: 0px;">
class="input-append row-fluid" style="margin-bottom: 0px;">
"search_condition" type="text" placeholder="請輸入搜索條件" class="span8" style="font-size:12px"/>
"button" class="btn btn-info" onclick="search_ztree('dep_tree', 'search_condition')">搜索
"dep_tree" class="ztree">
更多關(guān)于ztree控件的內(nèi)容,請參考專題《jQuery插件ztree使用匯總》 。
以上就是jquery ztree實現(xiàn)模糊搜索功能的代碼,希望對大家的學習有所幫助。
相關(guān)文章
判斷多個input type=file是否有已經(jīng)選擇好文件的代碼
在each中使用return false退出循環(huán),使用return true結(jié)束當前次循環(huán),進行下一次循環(huán)2012-05-05
基于jQuery實現(xiàn)Accordion手風琴自定義插件
這篇文章主要為大家詳細介紹了基于jQuery實現(xiàn)Accordion手風琴自定義插件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
jQuery下擴展插件和拓展函數(shù)的寫法(匿名函數(shù)使用的典型例子)
這些年,javascript火起來了,主要歸功于AJAX的推廣應(yīng)用,Web2.0的發(fā)展。。。于是,出現(xiàn)了很多的javascript框架。2010-10-10
基于jquery實現(xiàn)的仿優(yōu)酷圖片輪播特效代碼
這篇文章主要為大家介紹了基于jquery實現(xiàn)的仿優(yōu)酷圖片輪播特效代碼,感興趣的小伙伴們可以參考一下2016-01-01
jQuery bxCarousel實現(xiàn)圖片滾動切換效果示例代碼
BxCarousel可以指定顯示的元素總數(shù),可以指定每次滾動的元素個數(shù),自動播放模式,前一張/后一張按鈕控制圖片流動2013-05-05
基于jQuery實現(xiàn)彈出可關(guān)閉遮罩提示框?qū)嵗a
這篇文章主要介紹了基于jQuery實現(xiàn)彈出可關(guān)閉遮罩提示框?qū)嵗a的相關(guān)資料2016-07-07

