最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

zTree异步加载时添加子节点总是重复怎么解决

来源:懂视网 责编:小采 时间:2020-11-27 19:59:37
文档

zTree异步加载时添加子节点总是重复怎么解决

zTree异步加载时添加子节点总是重复怎么解决:这次给大家带来zTree异步加载时添加子节点总是重复怎么解决,解决zTree异步加载时添加子节点总是重复的注意事项有哪些,下面就是实战案例,一起来看一下。zTree 是一个依靠 jQuery 实现的多功能 树插件。下面通过本文给大家分享jQuery zTree
推荐度:
导读zTree异步加载时添加子节点总是重复怎么解决:这次给大家带来zTree异步加载时添加子节点总是重复怎么解决,解决zTree异步加载时添加子节点总是重复的注意事项有哪些,下面就是实战案例,一起来看一下。zTree 是一个依靠 jQuery 实现的多功能 树插件。下面通过本文给大家分享jQuery zTree

这次给大家带来zTree异步加载时添加子节点总是重复怎么解决,解决zTree异步加载时添加子节点总是重复的注意事项有哪些,下面就是实战案例,一起来看一下。

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。下面通过本文给大家分享jQuery zTree 异步加载添加子节点重复问题,需要的朋友参考下吧

zTree 简介

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

zTree 是开源免费的软件(MIT 许可证)。如果您对 zTree 感兴趣或者愿意资助 zTree 继续发展下去,可以进行捐助。

  • zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载

  • 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀

  • 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器

  • 支持 JSON 数据

  • 支持静态 和 Ajax 异步加载节点数据

  • 支持任意更换皮肤 / 自定义图标(依靠css)

  • 支持极其灵活的 checkbox 或 radio 选择功能

  • 提供多种事件响应回调

  • 灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可以多节点拖拽哟

  • 在一个页面内可同时生成多个 Tree 实例

  • 简单的参数配置实现 灵活多变的功能

  • 原始问题

    //添加结点, 产品和版本
    function addNode(event) {
     rMenu.css({ "visibility": "hidden" });
     var treeNode = zTree.getSelectedNodes()[0];
     var pid;
     var nodeName;
     var treelevel;
     if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
     //添加产品结点
    pid = 0;
     treeNode = null;
     treelevel = 1;
     } else if (treeNode) {
     //添加版本结点
    pid = treeNode.id;
     treelevel = 2;
     }
     $.post(
     "AddNode.action",
     { type: treelevel, id: pid },
     function(nodeIdAndName) {
     var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName);
     if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
     zTree.expandNode(treeNode, true);
     }
     treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
     });
    }

    原本直接添加子节点的时候,如果父节点没有展开,会添加两个一样的子节点(第一次的时候);后来我对父节点是否展开进行了判断,但是却变成了如果父节点展开,会添加两个一样的子节点(第一次的时候),这个问题要怎么解决呢?

    办法一

    if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
     zTree.expandNode(treeNode, true);
     }
     treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });

    改成

    if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0)
     {
     treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
     }
     else if(treeNode.open)
     {
     if(treeNode.isParent)
     {
     zTree.reAsyncChildNodes(treeNode, "refresh");
     }
     else
     {
     treeNode.isParent=true;
     zTree.reAsyncChildNodes(treeNode, "refresh");
     }
     }
     else
     {
     zTree.expandNode(treeNode, true);
     treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
     }

    问题就可以解决了,但是有没有优化呢?感觉改后的代码分类太多了

    最优办法

    貌似不用这么麻烦吧?前两天回答了类似的问题。

    1、点击添加子节点后,就直接 ajax 传给后台保存数据,捕获 success 事件

    2、ajax success 时,利用 treeNode.zAsync 属性就可以知道此父节点是否进行过异步加载,如果为 false 那么直接 reAsyncChildNodes 刷新, 如果为 true 那么利用 addN...

    if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync) 
     treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
     else
     zTree.reAsyncChildNodes(treeNode, "refresh");

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    怎么发掘空白处隐藏元素

    Ajax怎么实现下拉框无刷新联动

    无new构建详解

    jQuery实现下拉菜单导航

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    zTree异步加载时添加子节点总是重复怎么解决

    zTree异步加载时添加子节点总是重复怎么解决:这次给大家带来zTree异步加载时添加子节点总是重复怎么解决,解决zTree异步加载时添加子节点总是重复的注意事项有哪些,下面就是实战案例,一起来看一下。zTree 是一个依靠 jQuery 实现的多功能 树插件。下面通过本文给大家分享jQuery zTree
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top