ztree刷新(重置)整棵树,并且刷新完之后选中刷新之前的节点,展开之前展开的节点

时间:2025-02-07 07:06:59

首先说一件脑壳很疼的事情,就是在项目中用到了很多ztree,这块是我最头疼的,因为测试每天提的bug都是这块问题的,说来说去,就是一句话,做这些操作的时候只要刷新一下(或重新加载一下这颗树)就好了。
那么重点来了,怎样才能做到在操作节点的时候刷新这颗树呢,我尝试了很多次都不能成功,最后,终于解决了。。。。。。内心那是无比的开心呀。。。
刷新操作的时候,首先要重置这些树,并且获取到刷新之前选中的节点,刷新之后让其继续选中刷新之前选中的节点,并且展开刷新之前展开的节点。。。。好了,话不多说,上代码

// 我自己封装了一个函数,哪边用到哪边调用就好了

function refresh(){
          // 获取整棵树上所有的节点
          var zNodes = getPolicyList();
          if ( > 0) {
              var treeObj = $.("policyTree");
              // 获取刷新之前选中的节点
              var nodes = ();
              var selectId = nodes[0].id;
              // 重置树
              $.($("#policyTree"), policyTreeSetting, zNodes);
              // 刷新之后默认选中刷新之前的节点
              var node = ("id", selectId);
              (node, true);
   
              // 刷新之后默认展开刷新之前展开的节点
              var cookie = $.cookie("z_tree" + );
              if (cookie) {
                  z_tree = (cookie);
                  for (var i = 0; i < z_tree.length; i++) {
                      var node = ('id', z_tree[i]);
                      (node, true, false);
                  }
              }
          }
      }


注意:此处需要用到,导入这个js,默认展开的才会展开

除此之外,还需要用到两个函数,在ztree的callback中写,相信用过ztree的人都懂

callback:{

               onExpand: onExpand,//刷新时展开节点
                onCollapse: onCollapse//刷新时关闭节点

}

/**
         * 刷新节点后默认打开原来的位置
         * @param event
         * @param treeId
         * @param treeNode
         */
        function onExpand(event, treeId, treeNode) {
            var cookie = $.cookie("z_tree" + );
            var z_tree = new Array();
            if (cookie) {
                z_tree = (cookie);
            }
            if ($.inArray(, z_tree) < 0) {
                z_tree.push();
            }
            $.cookie("z_tree" + , (z_tree))
        }

        /**
         * 刷新节点后关闭节点的位置
         * @param event
         * @param treeId
         * @param treeNode
         */
        function onCollapse(event, treeId, treeNode) {
            var cookie = $.cookie("z_tree" + );
            var z_tree = new Array();
            if (cookie) {
                z_tree = (cookie);
            }
            var index = $.inArray(, z_tree);
            z_tree.splice(index, 1);
            for (var i = 0; i < ; i++) {
                index = $.inArray([i].id, z_tree);
                if (index > -1) z_tree.splice(index, 1);
            }
            $.cookie("z_tree" + , (z_tree))
        }

好吧,一个完完整整的关于ztree刷新整棵树,刷新完之后选中之前选中的节点,展开之前展开的节点就这样实现了!