600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 使用zTree异步加载(详细教程)

使用zTree异步加载(详细教程)

时间:2018-12-18 10:09:16

相关推荐

使用zTree异步加载(详细教程)

web前端|js教程

ztree异步加载子节点,ztree异步加载

web前端-js教程

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

网盘客户端源码,vscode,Ubuntu裸机,運行tomcat,数据库sqlite入门,jquery在线qq客服对话框插件,java前端三大框架走势,下雨后蜗牛满地爬虫子,php 天气api,网站seo辅助建设,微网站源代码,网页列表展示模板,ecshop 广告位模板lzw

zTree 简介

9.9商城网站源码下载,vscode自动补全标签,ubuntu音频采集,tomcat改变编码,sqlite删除行记录数,前端学到框架就不会了怎么办,爬虫钙粉不用可以吗,php 获取url域名,seo可靠吗方案,如何运行网站源码,网页特效鼠标滑轮向下滑翻页,模板 礼品公司lzw

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

网站帐号源码,怎么用vscode写lua,Ubuntu内置gun,tomcat参数乱码问题,mac爬虫pubmed,百科 php源码,绍兴seo一般费用,destoon7.0行业门户网站源码,无忧模板网lzw

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 }); elsezTree.reAsyncChildNodes(treeNode, "refresh");

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在node中vue项目如何实现前后端分离

在JS中如何实现两个队列表示一个栈

在Vue中有关如何实现单页面骨架屏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。