EasyUI----EasyUI-Tree联想加模糊查询

最近做的项目中用到了EasyUI的Tree,树的结构是这样的,有22个车站,每一个车站相当于一个逻辑域(虚拟域),每一个域下有许多的设备类型,拿我现在做的门禁系统来说,设备类型有门禁主控制器和门禁就地控制器等设备类型,每一种设备类型下面会有多个设备,每一个车站可能会有好几十个设备,22个车站就可能会有上百个或者上千个设备,这样在加载成Tree后,比如说想要查看文锦站的A站口的门禁就地控制器的信息,要是让你一个节点一个节点的打开去找,肯定会烦死的,所以我们就做了一个(联想+模糊)查询。

一开始我们是按照这篇文章js/jQuery实现类似百度搜索功能做的,但是做出来之后会有一个很大的缺点,就是不能够复用,别人要是想用的话,必须得把整个代码再改一遍才能用,真得感谢我们的组长,一开始对于面向对象的思想重视的还是不够,但是面向对象是真的非常的重要,面向对象的核心思想就是抽象,一层一层的往上抽象,之前做项目的时候,许多的知识点都是其他人封装好了我们直接拿过来用的,有种被惯坏了的赶脚,真正的想要去深入的理解一种知识,就应该从它的根本抓起,把它的核心原理能够轻松的运用,这才是大牛的发展路,用别人封装好的东西,永远都是被别人牵着鼻子走,为什么不自己当个领路人呢?

咳咳~~扯远了,接着回来说查询的这个功能,每一棵Tree都跟着一个搜索框,想要能够达到复用的结果可以这么改,看代码:

'''Html部分'''
<%-- 查询 --%>
<div style="position: relative">
	<input id="kw" onkeyup="getContent(this,'myTree');" style="background-image:url('../Pictrue/搜索.png'); background-position:right; background-repeat:no-repeat; width: 195px;" />
	<div id="append" style="position: absolute; background-color: white;"></div>
</div>

接下来是javascript文件,很重要的哦~~好好找不同点!

'''javascript代码'''

var treeid;
var textid;
$(function () {
    //键盘事件
    $(document).keydown(function (e) {
        e = e || window.event;
        var keycode = e.which ? e.which : e.keyCode;
        //键盘Up事件
        if (keycode == 38) {
            if (jQuery.trim($("#append").html()) == "") {
                return;
            }
            movePrev();
            //键盘Down事件
        } else if (keycode == 40) {
            if (jQuery.trim($("#append").html()) == "") {
                return;
            }
            $("#"+textid).blur();
            if ($(".item").hasClass("addbg")) {
                moveNext();
            } else {
                $(".item").removeClass('addbg').eq(0).addClass('addbg');
            }
            //键盘回车Enter
        } else if (keycode == 13) {
            dojob();
        }
    });

    //向上移动
    var movePrev = function () {
        $("#" + textid).blur();
        var index = $(".addbg").prevAll().length;
        if (index == 0) {
            $(".item").removeClass('addbg').eq($(".item").length - 1).addClass('addbg');
        } else {
            $(".item").removeClass('addbg').eq(index - 1).addClass('addbg');
        }
    }
    //向下移动
    var moveNext = function () {
        var index = $(".addbg").prevAll().length;
        if (index == $(".item").length - 1) {
            $(".item").removeClass('addbg').eq(0).addClass('addbg');
        } else {
            $(".item").removeClass('addbg').eq(index + 1).addClass('addbg');
        }

    }

    //公共方法
    var dojob = function () {

        $("#" + textid).blur();     //失去焦点事件
        var node = $("#" + treeid).tree('getChildren');    //获取Tree的所有节点
        $("#" + treeid).tree('expandAll', node.target);    //展开所有节点
        var value = $(".addbg").text();        //获取文本框输入的内容

        //查找相应节点并滚动到该节点,高亮显示
        for (i = 0; i < node.length; i++) {
            var treeId = node[i].id;
            var treeName = node[i].text;
            //找到相应的设备
            if (treeName.indexOf(value) >= 0) {
                if (treeName==value) {
                    var nodes = $("#" + treeid).tree('find', treeId);   //找到当前的节点
                    $("#" + treeid).tree('scrollTo', nodes.target);     //滚动到当前节点
                    $("#" + treeid).tree('select', nodes.target);       //高亮显示
                }

            }
        }
        $("#" + textid).val(value);    //将选择的设备显示到搜索框中
        $("#append").hide().html("");   //隐藏下拉框

    }

});
//输入事件
function getContent(obj,idtree) {
    treeid = idtree;

    textid = obj.id;
    //获取tree的所有节点
    var nodes = $("#"+treeid).tree('getChildren');
    //获取输入的值
    var kw = jQuery.trim($(obj).val());
    if (kw == "") {
        $("#append").hide().html("");
        return false;
    }
    var html = "";
    //匹配并动态加载到下拉框中
    for (i = 0; i < nodes.length; i++) {
        var treeId = nodes[i].id;
        var treeName = nodes[i].text;

        if (treeName.indexOf(kw) >= 0) {
            //动态加载下拉框和数据
            html = html + "<div style='width:200px;' class='item' onmouseenter='getFocus(this)' onClick='getCon(this,treeid);'>" + treeName + "</div>";
        }
    }
    if (html != "") {
        $("#append").show().html(html);
    } else {
        $("#append").hide().html("");
    }
}
//获取焦点事件
function getFocus(obj) {
    $(".item").removeClass("addbg");
    $(obj).addClass("addbg");
}
//单击事件
function getCon(obj, treeid) {
    $("#" + textid).blur();     //失去焦点事件
    var node = $("#" + treeid).tree('getChildren');    //获取Tree的所有节点
    $("#" + treeid).tree('expandAll', node.target);    //展开所有节点
    var value = $(obj).text();        //获取文本框输入的内容

    //查找相应节点并滚动到该节点,高亮显示
    for (i = 0; i < node.length; i++) {
        var treeId = node[i].id;
        var treeName = node[i].text;
        //找到相应的设备
        if (treeName.indexOf(value) >= 0) {
            if (treeName == value) {
                var nodes = $("#" + treeid).tree('find', treeId);   //找到当前的节点
                $("#" + treeid).tree('scrollTo', nodes.target);     //滚动到当前节点
                $("#" + treeid).tree('select', nodes.target);       //高亮显示
            }
        }
    }
    $("#" + textid).val(value);    //将选择的设备显示到搜索框中
    $("#append").hide().html("");   //隐藏下拉框
}

在外面工作,收获是很大的,之前做项目,许多的东西都是别人封装好,咱们直接拿过来用,再怎么找也没有自己去从头到尾研究一边来的透彻,现在工作了,项目刚开始做,工作量还是很大的,不过能学到的知识也是很多的,有苦才有甜嘛!

转载请注明出处:http://blog.csdn.net/zlts000/article/details/47959173

时间: 2024-09-10 15:24:07

EasyUI----EasyUI-Tree联想加模糊查询的相关文章

spring mvc easyui 中tree如何加载数据

问题描述 spring mvc easyui 中tree如何加载数据 easyUI tree如何加载spring mvc 传过来的数据,..也不知道传过来没有 解决方案 就这样写可以了,还是其它什么意思? $('#tt').tree({ url:'/...' // Spring MVC 请求的地址 }); 解决方案二: 已经解决了,原来直接返回数据时还需要一个@responseBody的注解. 不过还是非常感谢

easyui的tree控件动态加载树类型

问题描述 easyui的tree控件动态加载树类型 这个真不会写了高人帮看看 实现树类型 附有数据库表 后台用c#的一般处理程序 前台怎么传节点 等等 写的时候帮我写点注释.感激不尽!!! 解决方案 .................. 解决方案二: http://blog.csdn.net/hzw2312/article/details/38919877 C#不太清楚,java的话能帮你

使用EasyUI Tree异步加载JSON数据 生成树

这几天因为工作需要,要做一个支持无限级的菜单. 我也是菜鸟一只,能想到的东西不多,所以用了Easy UI的tree组件. 不得不说,easyui确实很强大.  因为是无限级菜单,数据量可能有点大,所以考虑采用异步加载. 但是因为后台默认传来的数据是 一个实体,所以又在后台进行了JSON字符串拼接. 最后,在网上找了N多代码,然后又去问了好几个群里的网友,终于搞出来这个小东西.    一.HTML部分代码 <div id="categoryChooseDiv" title=&quo

easyui combobox 左匹配模糊查询

 之前一直不知道,easyui 的combobox还有从左匹配查询显示数据的.  样式是这样的:(这是数据是已经存在下拉列表里的)        在这样操作的时候,遇到了一个问题.(其实也不算问题的). 就是操作人员在添加机构的时候,把机构的名称打了空格,就是相当于是这样的一个字符串  "  XXX机构". 这样的话,在combobox里左匹配是查询不出这条数据的. 但是这条数据时存在这个下来列表里的!  

jsonp-怎样使easyui的json重新加载

问题描述 怎样使easyui的json重新加载 List selectPProduct = productClassFacade.selectPProductClassListLazy(map); setOperate(selectPProduct, request.getContextPath()); String json = JSONArray.fromObject(selectPProduct).toString(); System.out.println(json+"!!!!!!!!!

EasyUi combotree 实现动态加载树节点_javascript技巧

推荐阅读: 简介EasyUI datagrid editor combogrid搜索框的实现 EasyUi中的Combogrid 实现分页和动态搜索远程数据 easyui 1.2.4例子中并没有给出动态加载树节点的例子,只好自己研究. 从源码中可知可以看出combotree 是继承 combo 和 tree两个控件,所以在展开其下级子节点时,把combotree内置的tree的options选项的url重置成一个动态取选择值的url,代码如下: $('#cc').combotree({ url:

EasyUI 树图在VS2013加载没问题,在IIS加载不了? Why???

问题描述 <divclass="tab-panefade"id="s1"><!--树图--><divclass="easyui-panel1"style="padding:5px"><ulid="tt1"data-options="url:'js/plugin/easyui/department.json',lines:true,method:'get',

easyui datagrid 大数据加载效率慢,优化解决方法(推荐)_jquery

在使用easyui datagrid途中发现加载数据的效率真的不是一般的差.经测试IE8加载300条数据就感觉明显的慢了,加载2000条数据就另人崩溃用时差不多60秒,就算在google浏览器测试结果也快不了几秒. 平时听闻easyui datagrid效率底下,自己测试才发现真是使人无法忍受. 笔者只好百度,google解决方法,发现一篇文章说改 //1.3.3版本是这样的,其它版本也是这句代码 $(_1e0).html(_1e4.join("")); 改为: $(_1e0)[0].

模糊查询分页技术,做了之后,分页不能实现

问题描述 模糊查询分页技术,做了之后,分页不能实现 在页面通过from表单提交某些数据,在后台里进行模糊查询,查询出来的东西正常显示在页面上,但是,当一点击下一页的时候,向后台提交不了输入的关键词,该如何解?急求. 解决方案 分页模糊查询存储过程Access 模糊 参数 查询 分页 解决方案二: 在后台生成页脚(第一页,第二页)的时候,就把你搜索的参数带过去. 解决方案三: 怎么提交不了?你的代码咋写的 解决方案四: 代码贴出来, 解决方案五: 点击下一页的时候,从容器或者什么数据结构中取第二页