欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

实例详解ztree在vue项目中使用并且带有搜索功能

程序员文章站 2022-07-22 09:27:06
ztree 是一个依靠 jquery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 ztree 最大优点。 上篇文章给大家介绍了,大家可以点击查看。...

ztree 是一个依靠 jquery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 ztree 最大优点。

上篇文章给大家介绍了,大家可以点击查看。

之前博客介绍过怎么在vue里展示以及获取点击元素的内容,此文章之介绍搜索功能

html

<el-form-item label="机构" class="ztree-par">
<i class="icon_org"></i>
<input type="text" placeholder="请输入机构" id="ser" v-model="ruleform.mechanism" @keyup.enter="search_ztree('treedemo', 'ser')" @click.stop = "control()" class="login-input">
<el-button icon="el-icon-arrow-down" @click.stop="control()"></el-button>
<div class="ztree-z" v-show="ztreecon">
<ul id="treedemo" class="ztree"></ul>
</div>
</el-form-item>

main.js需要单独引入

import "./../static/ztree/js/jquery.ztree.exhide-3.5.min.js";

如果不单独引入这个会获取不到很多元素,在input回车事件或者点击事件的时候直接执行此事件即可

代码部分

expand_ztree(treeid) {
  var treeobj = $.fn.ztree.getztreeobj(treeid);
  treeobj.expandall(true);
 },
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') {
   //根节点:展开
   treeobj.expandnode(nodes[i], true, true, false);
  } else {
   //非根节点:收起
   treeobj.expandnode(nodes[i], false, true, false);
  }
  }
 },
search_ztree(treeid, searchconditionid) {
  this.searchbyflag_ztree(treeid, searchconditionid, "");
 },
searchbyflag_ztree(treeid, searchconditionid, flag) {
  //<1>.搜索条件
  var searchcondition = $('#' + searchconditionid).val();
  //<2>.得到模糊匹配搜索条件的节点数组集合
  var highlightnodes = new array();
  if (searchcondition != "") {
  var treeobj = $.fn.ztree.getztreeobj(treeid);
  highlightnodes = treeobj.getnodesbyparamfuzzy("name", searchcondition, null);
  }
  //<3>.高亮显示并展示【指定节点s】
  this.highlightandexpand_ztree(treeid, highlightnodes, searchcondition, flag);
 },
highlightandexpand_ztree(treeid, highlightnodes, tx, flag) {
  var treeobj = $.fn.ztree.getztreeobj(treeid);
  //<1>. 先把全部节点更新为普通样式
  var treenodes = treeobj.transformtoarray(treeobj.getnodes());
  for (var i = 0; i < treenodes.length; i++) {
  treenodes[i].highlight = false;
  treeobj.updatenode(treenodes[i]);
  }
  //<2>.收起树, 只展开根节点下的一级节点
  this.close_ztree(treeid);
  //<3>.把指定节点的样式更新为高亮显示,并展开
  if (highlightnodes != null) {
  for (var i = 0; i < highlightnodes.length; i++) {
   if (flag != null && flag != "") {
   if (highlightnodes[i].flag == flag) {
    //高亮显示节点,并展开
    highlightnodes[i].highlight = true;
    treeobj.updatenode(highlightnodes[i]);
    //高亮显示节点的父节点的父节点....直到根节点,并展示
    var parentnode = highlightnodes[i].getparentnode();
    var parentnodes = this.getparentnodes_ztree(treeid, parentnode);
    treeobj.expandnode(parentnodes, true, false, true);
    treeobj.expandnode(parentnode, true, false, true);
   }
   } else {
    treeobj.updatenode(highlightnodes[i]);
   var parentnode = highlightnodes[i].getparentnode();
   var parentnodes = this.getparentnodes_ztree(treeid, parentnode);
   treeobj.expandnode(parentnodes, true, false, true);
   treeobj.expandnode(parentnode, true, false, true);
   }
  }
  }
 },
getparentnodes_ztree(treeid, node) {
  if (node != null) {
  var treeobj = $.fn.ztree.getztreeobj(treeid);
  var parentnode = node.getparentnode();
  return this.getparentnodes_ztree(treeid, parentnode);
  } else {
  return node;
  }
 }

展示

实例详解ztree在vue项目中使用并且带有搜索功能

这个有个小小的bug,就是做键盘按下或者抬起的时候会有问题,,这个文章就解决了这个问题

实例详解ztree在vue项目中使用并且带有搜索功能

总结

以上所述是小编给大家介绍的ztree在vue项目中使用并且带有搜索功能,希望对大家有所帮助