网站首页 > 开源技术 正文
介绍
最近在做系统的功能优化,其中有一个功能是搜索系统菜单,因为之前的搜索UI比较落后难看,全部用DIV实现,本次修改采用zTree树状结构展示,并且可以根据关键字进行模糊搜索并且把不符合条件的筛选掉,只显示符合条件的节点;
本次修改采用zTree树状结构,最终效果图:
点击文本框显示全部的菜单节点,输入搜索内容,根据内容过滤出需要的具体节点;
代码实现
引用
<link type="text/css" rel="stylesheet" href="ztree_v3/css/metroStyle/metroStyle.css">
<script type="text/javascript" src="ztree_v3/js/jquery.ztree.all.js"></script>
<script type="text/javascript" src="ztree_v3/js/jquery.ztree.exhide.js"></script>
HTML代码
<div class="top-search-div form-group form-group-sm has-success has-feedback" style="float: right;margin-top: 0;margin-bottom: 0;">
<div style="width: 65px;float: left;position: absolute;left: -48px;top: 6px;font-size: 12px;color:#333333;">菜单搜索</div>
<input type="text" class="form-control" id="top-search-input" name="top-search-input" placeholder="搜索内容..." autocomplete="off">
<span class="fa fa-angle-down form-control-feedback" id="top-search"></span>
</div>
获取菜单数据,并加载到zTree中
var resourcesTree;
function loadTree(){
var setting = {
data: {
key : {
name: "name",
title: "name"
}
},
view: {
showIcon: true,
selectedMulti: false
}
};
$.ajax({
type: 'POST',
url:"获取菜单数据的后台路径",
success: function(result){ resourcesTree=$.fn.zTree.init($("#resourcesTree"), setting,result);
resourcesTree.setting.async.enable=true;
treeNodelickAble=true;
}
});
};
点击文本框打开Ztree
$("#top-search-input").on("click",function(){
if($("#resourcesTreePanle").css("display") == "block"){
$("#resourcesTreePanle").css("display","none");
}
else{
$("#resourcesTreePanle").css("display","block");
}
})
按回车键搜索zTree
$("#top-search-input").keyup(function(e){
if(e.keyCode==13){
$("#top-search").click();
}
});
$("#top-search").click(function(){
if($("#resourcesTreePanle").css("display") == "block"){
$("#resourcesTreePanle").css("display","none");
}
else{ $("#resourcesTreePanle").css("display","block");
}
var nodes = resourcesTree.getNodesByParam("isHidden",true);
resourcesTree.showNodes(nodes);
var root = resourcesTree.getNodesByParamFuzzy("name", "", null);
var hiddenNodes = new Array();
var searchText = $("#top-search-input").val();
for(index in root){
filterNodes(root[index],searchText,hiddenNodes);
resourcesTree.hideNodes(hiddenNodes);
}
resourcesTree.expandAll(true);
});
过滤核心代码
使用递归实现,如果数据量比较大的情况下,可能会吃内存比较严重,可以采用后台处理
function filterNodes(node,inputStr,filterResult){
if(node != null){
//自身是否符合搜索条件
var selfMatch = node.name.indexOf(inputStr) > -1;
//子节点是否有满足条件的节点
var childMatch = false;
var children = node.children;
if(children != undefined){
for(index in children){
childMatch = filterNodes(children[index],inputStr,filterResult) || childMatch;
}
}
//自身不满足搜索条件且其子节点不包含有满足条件的节点
if(!selfMatch && !childMatch){
filterResult.push(node);
}
return selfMatch || childMatch;
}
else{
return true;
}
}
至此zTree实现前端模糊搜索及过滤掉不符合条件的节点已经完成;
参考资料:
Ztree官网:http://www.treejs.cn/v3/main.php#_zTreeInfo
猜你喜欢
- 2024-09-30 基于经典领域驱动设计的权限管理及快速开发框架
- 2024-09-30 重量级课程发布~企业权限管理平台(SpringBoot2.0+Shiro+Vue)
- 2024-09-30 java轻量级的CMS系统(java cms gc)
- 2024-09-30 异性聊天时,如果频繁出现这些“情话”,别傻!Ta认定你了
- 2024-09-30 极简工具箱(极简工具箱下载)
- 2024-09-30 wms仓库管理系统jeewms(wms仓库管理软件)
- 2024-09-30 crypto-js加解密库使用-环境部署及测试
- 2024-09-30 基于SpringBoot 的MCMS系统,完全开源,直接商用太爽了
- 2024-09-30 前同事2024年接私活已入百万,都是用这几个开源的SpringBoot项目
- 2024-06-13 JAVA版包含PDA端和WEB端仓库管理系统
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)