保存jstree信息并展示新的tree
2017-02-17 16:10
162 查看
代码如下:
调试的过程中遇到不少问题,这里总结一下:
1、在创建新的tree的时候,要清空之前tree的数据,不然不会变:
要删掉节点中的children和children_d元素,不用怕丢失了节点间的关系,因为还有parent元素存在
3、展示tree的时候,根节点(即是id为“#”的节点)可以没有,但不能少了根节点以外的任何父节点,不然会报错,tree就加载不了
4、同级节点的字符串的顺序决定了tree的展示后的节点顺序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="GBK"> <title>jstree basic demos</title> <style> html { margin:0; padding:0; font-size:62.5%; } body { max-width:800px; min-width:300px; margin:0 auto; padding:20px 10px; font-size:14px; font-size:1.4em; } h1 { font-size:1.8em; } .demo { overflow:auto; border:1px solid silver; min-height:100px; } </style> <link rel="stylesheet" href="jstree/themes/default/style.min.css" /> </head> <body> <h1>Inline data demo</h1> <div id="treeData1"> <div id="treeDiv" class="demo"></div> </div> <div id="treeData2"> <div id="treeDiv2" class="demo"></div> </div> <script src="jstree/jquery.min.js"></script> <script src="jstree/jstree.min.js"></script> <script> //初始化树字符串 initTreeStr='[{ "id" : "root1", "parent" : "#", "text" : "root1" ,"data":"2"}, ' +' { "id" : "root2", "parent" : "#", "text" : "root2","data":"1"} ,' +' { "id" : "child1", "parent" : "root1", "text" : "child1" ,"data":"3"}, ' +' { "id" : "child2", "parent" : "root1", "text" : "child2" ,"data":"4"}] '; //初始化树 initTree('treeDiv',initTreeStr); var allId=""; var allStr=""; function initTree(id,data){ $('#treeData1').html('<div id="treeDiv" class="demo"></div>'); $('#treeDiv').jstree({ "checkbox" : { "keep_selected_style" : false }, 'plugins' : [ "dnd", "types", "wholerow","checkbox","unique"], 'core' : { 'check_callback' : true, 'data' : JSON.parse(data) } }); $('#treeDiv').on('changed.jstree', function (e, data) { getAllId(data); initTree2(allStr); }); $('#treeDiv').on('move_node.jstree',function(e,data){ getAllId(data); initTree2(allStr); }); } function initTree2(data){ vdata=standardJson(data); //清空上一颗树信息 $('#treeData2').html('<div id="treeDiv2" class="demo"></div>'); $('#treeDiv2').jstree({ "checkbox" : { "keep_selected_style" : false }, 'plugins' : [ "dnd", "types", "wholerow","checkbox","unique"], 'core' : { 'check_callback' : true, 'data' : JSON.parse(vdata) } }); $('#treeDiv2').on('changed.jstree', function (e, data) { }); $('#treeDiv2').on('move_node.jstree',function(e,data){ }); } function getAllId(data){ allId=""; allStr=""; var obj=data.instance._model.data; for(o in obj){ if(obj[o].id=='#'&&obj[o].children!=''){ getId(obj,obj[o]); } } allId=allId.substr(0,allId.length-1); allStr=allStr.substr(0,allStr.length-1); return allId; } //从父节点递归获取其所有子节点信息,并保存所有节点的id和树节点的字符串 function getId(obj,parent){ //不保存根节点的,tree展示不需要 if(parent.id!='#'&&parent.state.selected==true){ allId=allId+parent.id+","; allStr=allStr+JSON.stringify(parent)+","; } if(parent.children!=null&&parent.children!=''){ for(i in parent.children){ //获取child的id var child=parent.children[i]; getId(obj,obj[child]); } } } //过滤掉children和children_d元素,避免展示子节点重复的问题 function standardJson(jsonStr){ var json=JSON.parse("["+jsonStr+"]"); var str="[ "; for(var o in json){ var childObj=json[o]; if(childObj.id!='#'){ if(childObj.children!=null&&childObj.children!=''){ delete childObj["children"]; delete childObj["children_d"]; } if(childObj.original!=null){ delete childObj["original"]; } var id=JSON.stringify(childObj); str=str+id+","; } } str=str.substr(0,str.length-1); str=str+" ]"; return str; } </script> </body> </html>
调试的过程中遇到不少问题,这里总结一下:
1、在创建新的tree的时候,要清空之前tree的数据,不然不会变:
//不行,树没有状态了 $('#treeDiv2').jstree(true).refresh(); //不行,一直显示load $('#treeDiv2').removeData(); //最后试了这个方法才行: $('#treeData2').html('<div id="treeDiv2" class="demo"></div>');2、在展示已经修改之后的树时,发现出现了重复的子节点,解决办法:
要删掉节点中的children和children_d元素,不用怕丢失了节点间的关系,因为还有parent元素存在
3、展示tree的时候,根节点(即是id为“#”的节点)可以没有,但不能少了根节点以外的任何父节点,不然会报错,tree就加载不了
4、同级节点的字符串的顺序决定了tree的展示后的节点顺序
相关文章推荐
- Ueditor编辑保存的内容网页显示时背景等信息无效果---参考UEditor官方文档之编辑内容展示
- 信息采集循环入库,保存图片到本地,分页展示,memcache搜索判断次数,详情展示,防盗链
- 保存基本信息并展示
- Ueditor编辑保存的内容网页显示时背景等信息无效果---参考UEditor官方文档之编辑内容展示
- Flex 实践——信息管理系统version1 展示
- IOTest把输入的信息,保存到本地,按读取按钮将其读取出来
- Win32下绘图程序(二)保存绘图信息至文件
- SQLite保存登录信息
- Python 如何获取Android应用内存使用和CPU占用信息,并且时时展示曲线图形。
- APPlication,Session,Cookie和ViewState等对象保存信息的区别
- 用户登录保存密码等信息的可逆加解密算法
- 怎么把android程序崩溃的信息保存起来
- Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中
- 进度信息展示总结
- httpclient4 取得cookie信息并保存
- SSAS : 数据库角色的信息是保存在哪里的
- js调试记录,将客户的调试信息保存到服务器端的一个小方法。
- 选择合适的图表,展示数据信息
- 将用户信息保存到Cookie中