easyui tree根据输入框的值模糊匹配树节点,高亮显示

你的名字 2021-01-20 06:08 733阅读 0赞

效果图如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTczNjQw_size_16_color_FFFFFF_t_70

刚开始用easyui创建树,通过URL请求数据, 定义一个全局变量datas,在onLoadSuccess(数据加载成功时执行)获取到url返回的json字符串,针对json字符串进行处理,然后将获得目标数据重新挂载到树上,思路是这样,没想到的是,onLoadSuccess事件执行两次,按照百度的结果,去掉,class=’easyui-tree’还是加载两次,目标数据挂载到树节点上之后又迅速的被url里面的原数据覆盖掉。

于是我想到了另一个办法,通过树不在通过url请求调接口,通过树的data传值。

利用ajax接口仅请求一次。就避免了每次加载数据树两次刷新的问题,

html代码部分:

  1. <ul id="treem"></ul>

jQuery代码如下:

  1. var datas;//定义全局变量,用来存储树的数据
  2. $(function(){
  3. //静态树加载
  4. $.ajax({
  5. type: 'GET',
  6. url: '../../../../../../webapp/grp/pm/json/tree_data_simp.json',
  7. success: function (result) {
  8. datas=result;
  9. $('#treem').tree({
  10. data: result,
  11. parentField:"pid",
  12. textField:"name",
  13. idField:"id",
  14. lines:false,
  15. dnd: true
  16. });
  17. }
  18. });
  19. //对获取到的json数据进行处理。
  20. function formartedatas(dataf){
  21. var searchvalue=$("#search-input").val().trim();
  22. if(searchvalue){
  23. var sear=new RegExp(searchvalue);
  24. for(var i=0;i<dataf.length;i++){
  25. if(sear.test(dataf[i].name)){
  26. dataf[i].name="<span style='color:red;'>"+ dataf[i].name+"</span>";
  27. dataf[i].text="<span style='color:red;'>"+ dataf[i].text+"</span>";
  28. }
  29. }
  30. }else {
  31. alert("搜索框不可为空")
  32. };
  33. return dataf;
  34. }

//此处是一个深坑,常识,对象赋值给新的变量,对象的存储地址并没有改变,所以直接将对象赋值给一个变量,操作变量,原来的对象值也会随着改变,所以不能是简单的var newdatas=datas;这样导致每次树的处理效果会叠加。

用如下方法,拷贝对象,再操作新对象时,原值不变。

  1. // 复制对象的数值方法
  2. function clone(obj)
  3. {
  4. var o,i,j,k;
  5. if(typeof(obj)!="object" || obj===null)return obj;
  6. if(obj instanceof(Array))
  7. {
  8. o=[];
  9. i=0;j=obj.length;
  10. for(;i<j;i++)
  11. {
  12. if(typeof(obj[i])=="object" && obj[i]!=null)
  13. {
  14. o[i]=arguments.callee(obj[i]);
  15. }
  16. else
  17. {
  18. o[i]=obj[i];
  19. }
  20. }
  21. }
  22. else
  23. {
  24. o={};
  25. for(i in obj)
  26. {
  27. if(typeof(obj[i])=="object" && obj[i]!=null)
  28. {
  29. o[i]=arguments.callee(obj[i]);
  30. }
  31. else
  32. {
  33. o[i]=obj[i];
  34. }
  35. }
  36. }
  37. return o;
  38. }
  39. //搜索框点击事件
  40. $("#search").click(function(){
  41. var newdata=clone(datas);
  42. var datasel=formartedatas(newdata);
  43. //重新挂载树
  44. $("#treem").tree({
  45. data:datasel,
  46. })
  47. })
  48. });

补充:

当输入框的值为空时,恢复原数据展示代码:

  1. // 既时搜索判断文本框为空时恢复树的原值
  2. $('#search-input').bind('input propertychange', function() {
  3. var searchvalue=$("#search-input").val().trim();
  4. if(!searchvalue){
  5. $("#treem").tree({
  6. data:datas,
  7. })
  8. }
  9. });

发表评论

表情:
评论列表 (有 0 条评论,733人围观)

还没有评论,来说两句吧...

相关阅读

    相关 EasyUI Tree

    通过 $.fn.tree.defaults 重写默认的 defaults。 树(tree)在网页中以树形结构显示分层数据。它向用户提供展开、折叠、拖拽、编辑和异步加载功能。

    相关 js实现关键字匹配显示

    需求:用户输入文字之后,调用后台接口查询匹配关键字(模糊搜索),并把匹配到的关键字进行高亮显示。 实现思路:将拿到的数据进行拆分,例如:用户输入“羽毛球“,接口返回数据...