基于cookie实现ztree树刷新后,展开状态不变

来源:互联网 发布:淘宝不能跟客服聊天 编辑:程序博客网 时间:2024/06/07 22:41

原文链接

这种方案是基于cookie实现的,保存的是节点的id,这要求id本身不能重复,比较适用于同一张表的数据,比如有层次结构的分类等等



源码:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!DOCTYPE html>  
  2. <HTML>  
  3. <HEAD>  
  4.     <TITLE> ZTREE DEMO - beforeDrag / onDrag / beforeDrop / onDrop</TITLE>  
  5.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  6.     <link rel="stylesheet" href="../../../css/demo.css" type="text/css">  
  7.     <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">  
  8.     <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>  
  9.     <script type="text/javascript" src="../../../js/jquery.ztree.all-3.5.js"></script>  
  10.     <script type="text/javascript" src="../../../js/jquery.cookie.js"></script>  
  11.     <SCRIPT type="text/javascript">  
  12.         <!--  
  13.         var zTree, rMenu, selectNode;  
  14.           
  15.         var setting = {  
  16.             edit: {  
  17.                 drag: {  
  18.                     autoExpandTrigger: true,  
  19.                     prev: dropPrev,  
  20.                     inner: dropInner,  
  21.                     next: dropNext  
  22.                 },  
  23.                 enable: true,  
  24.                 showRemoveBtn: false,  
  25.                 showRenameBtn: false  
  26.             },  
  27.             data: {  
  28.                 simpleData: {  
  29.                     enable: true  
  30.                 }  
  31.             },  
  32.             callback: {  
  33.                 onRightClick: onRightClick,  
  34.                 onExpand: onExpand,  
  35.                 onCollapse: onCollapse,  
  36.                 beforeDrag: beforeDrag,  
  37.                 beforeDrop: beforeDrop,  
  38.                 beforeDragOpen: beforeDragOpen  
  39.             }  
  40.         };  
  41.   
  42.         var zNodes =[  
  43.             { id:'40', pId:'', name:"公司", root:true, open:open, icon:"../../../css/zTreeStyle/img/diy/1_open.png"},  
  44.             { id:'1', pId:'40', name:"部门1", dep:true, open:false, icon:"../../../css/zTreeStyle/img/diy/1_open.png"},  
  45.             { id:'11', pId:'1', name:"技术员", pos:true, open:false, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  46.             { id:'12', pId:'1', name:"数据员", pos:true, open:false, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  47.             { id:'13', pId:'1', name:"安全员", pos:true, open:false, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  48.             { id:'14', pId:'11', name:"张三1", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  49.             { id:'15', pId:'11', name:"张三2", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  50.             { id:'16', pId:'11', name:"张三3", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  51.             { id:'17', pId:'12', name:"张三1", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  52.             { id:'18', pId:'12', name:"张三2", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  53.             { id:'19', pId:'12', name:"张三3", emp:true, dropInner:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  54.             { id:'2', pId:'40', name:"部门2", dep:true, open:false, icon:"../../../css/zTreeStyle/img/diy/1_open.png"},  
  55.             { id:'21', pId:'2', name:"行政专员", pos:true, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  56.             { id:'22', pId:'2', name:"行政主管", pos:true, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"},  
  57.             { id:'23', pId:'2', name:"人事专员", pos:true, drag:false, icon:"../../../css/zTreeStyle/img/diy/2.png"}  
  58.         ];  
  59.   
  60.         function dropPrev(treeId, nodes, targetNode) {  
  61.             return false;  
  62.         }  
  63.         function dropInner(treeId, nodes, targetNode) {  
  64.             if (targetNode && targetNode.dropInner === false) {  
  65.                 return false;  
  66.             } else {  
  67.                 for (var i=0,l=curDragNodes.length; i<l; i++) {  
  68.                     if (!targetNode && curDragNodes[i].dropRoot === false) {  
  69.                         return false;  
  70.                     } else if (curDragNodes[i].parentTId && curDragNodes[i].getParentNode() !== targetNode && curDragNodes[i].getParentNode().childOuter === false) {  
  71.                         return false;  
  72.                     }else if(curDragNodes[i].emp && !targetNode.pos){  
  73.                         return false;  
  74.                     }else if(curDragNodes[i].dep && !targetNode.dep){  
  75.                         return false;  
  76.                     }  
  77.                 }  
  78.             }  
  79.             return true;  
  80.         }  
  81.         function dropNext(treeId, nodes, targetNode) {  
  82.             return false;  
  83.         }  
  84.   
  85.         var curDragNodes, autoExpandNode;  
  86.         function beforeDrag(treeId, treeNodes) {  
  87.             for (var i=0l=treeNodes.length; i<l; i++) {  
  88.                 console.log("beforeDrag" + treeNodes[i].parentTId);  
  89.                 if (treeNodes[i].drag === false) {  
  90.                     curDragNodes = null;  
  91.                     return false;  
  92.                 } else if (treeNodes[i].parentTId && treeNodes[i].getParentNode().childDrag === false) {  
  93.                     curDragNodes = null;  
  94.                     return false;  
  95.                 }  
  96.             }  
  97.             curDragNodes = treeNodes;  
  98.             return true;  
  99.         }  
  100.         function beforeDragOpen(treeId, treeNode) {  
  101.             autoExpandNode = treeNode;  
  102.             return true;  
  103.         }  
  104.         function beforeDrop(treeId, treeNodes, targetNode, moveType, isCopy) {  
  105.             if(!targetNode){  
  106.                 return false;  
  107.             }  
  108.             return true;  
  109.         }  
  110.           
  111.         function onRightClick(event, treeId, treeNode) {  
  112.             selectNode = treeNode;  
  113.             if(treeNode && treeNode.root){  
  114.                 zTree.selectNode(treeNode);  
  115.                 showRMenu("root", event.clientX, event.clientY);  
  116.             }  
  117.             else if (treeNode && treeNode.dep) {  
  118.                 zTree.selectNode(treeNode);  
  119.                 showRMenu("dep", event.clientX, event.clientY);  
  120.             }  
  121.             else if (treeNode && treeNode.pos) {  
  122.                 zTree.selectNode(treeNode);  
  123.                 showRMenu("pos", event.clientX, event.clientY);  
  124.             }  
  125.             else if(treeNode && treeNode.emp){  
  126.                 zTree.selectNode(treeNode);  
  127.                 showRMenu("emp", event.clientX, event.clientY);  
  128.             }  
  129.         }  
  130.   
  131.         function onExpand(event, treeId, treeNode){  
  132.             var cookie = $.cookie("z_tree");  
  133.               
  134.             var z_tree = null;  
  135.             if(cookie){  
  136.                 z_tree = JSON.parse(cookie);  
  137.             }  
  138.               
  139.             if(!z_tree){  
  140.                 z_tree = new Array();  
  141.             }  
  142.             if(jQuery.inArray(treeNode.id, z_tree)<0){  
  143.                 z_tree.push(treeNode.id);  
  144.             }  
  145.               
  146.               
  147.             $.cookie("z_tree", JSON.stringify(z_tree))  
  148.         }  
  149.           
  150.         function onCollapse(event, treeId, treeNode){  
  151.             var cookie = $.cookie("z_tree");  
  152.               
  153.             var z_tree = null;  
  154.             if(cookie){  
  155.                 z_tree = JSON.parse(cookie);  
  156.             }  
  157.               
  158.             if(!z_tree){  
  159.                 z_tree = new Array();  
  160.             }  
  161.             var index = jQuery.inArray(treeNode.id, z_tree);  
  162.               
  163.             z_tree.splice(index, 1);  
  164.               
  165.             $.cookie("z_tree", JSON.stringify(z_tree))  
  166.         }  
  167.           
  168.         function showRMenu(type, x, y) {  
  169.             $("#rMenu ul").show();  
  170.             if (type=="root") {  
  171.                 $("#m_addDep").show();  
  172.                 $("#m_addPos").hide();  
  173.                 $("#m_addEmp").hide();  
  174.                 $("#m_delPos").hide();  
  175.                 $("#m_delDep").hide();  
  176.                 $("#m_delEmp").hide();  
  177.             } else if(type=="dep"){  
  178.                 $("#m_addDep").show();  
  179.                 $("#m_addPos").show();  
  180.                 $("#m_addEmp").hide();  
  181.                 $("#m_delPos").hide();  
  182.                 $("#m_delDep").show();  
  183.                 $("#m_delEmp").hide();  
  184.             }else if(type=="pos"){  
  185.                 $("#m_addDep").hide();  
  186.                 $("#m_addPos").hide();  
  187.                 $("#m_addEmp").show();  
  188.                 $("#m_delPos").show();  
  189.                 $("#m_delDep").hide();  
  190.                 $("#m_delEmp").hide();  
  191.             }else if(type=="emp"){  
  192.                 $("#m_addDep").hide();  
  193.                 $("#m_addPos").hide();  
  194.                 $("#m_addEmp").hide();  
  195.                 $("#m_delPos").hide();  
  196.                 $("#m_delDep").hide();  
  197.                 $("#m_delEmp").show();  
  198.             }  
  199.             rMenu.css({"top":y+"px", "left":x+"px", "visibility":"visible"});  
  200.   
  201.             $("body").bind("mousedown", onBodyMouseDown);  
  202.         }  
  203.         function hideRMenu() {  
  204.             if (rMenu) rMenu.css({"visibility": "hidden"});  
  205.             $("body").unbind("mousedown", onBodyMouseDown);  
  206.         }  
  207.         function onBodyMouseDown(event){  
  208.             if (!(event.target.id == "rMenu" || $(event.target).parents("#rMenu").length>0)) {  
  209.                 rMenu.css({"visibility" : "hidden"});  
  210.             }  
  211.         }  
  212.         var addCount = 1;  
  213.         function addDep() {  
  214.             hideRMenu();  
  215.             var newNode = { name:"增加" + (addCount++), dep:true, icon:"../../../css/zTreeStyle/img/diy/1_open.png"};  
  216.             if (zTree.getSelectedNodes()[0]) {  
  217.                 newNode.checked = zTree.getSelectedNodes()[0].checked;  
  218.                 zTree.addNodes(zTree.getSelectedNodes()[0], newNode);  
  219.             } else {  
  220.                 zTree.addNodes(null, newNode);  
  221.             }  
  222.         }  
  223.           
  224.         function addPos() {  
  225.             hideRMenu();  
  226.             var newNode = { name:"增加" + (addCount++), pos:true, icon:"../../../css/zTreeStyle/img/diy/2.png"};  
  227.             if (zTree.getSelectedNodes()[0]) {  
  228.                 newNode.checked = zTree.getSelectedNodes()[0].checked;  
  229.                 zTree.addNodes(zTree.getSelectedNodes()[0], newNode);  
  230.             } else {  
  231.                 zTree.addNodes(null, newNode);  
  232.             }  
  233.         }  
  234.           
  235.         function addEmp() {  
  236.             hideRMenu();  
  237.             var newNode = { name:"增加" + (addCount++), emp:true, icon:"../../../css/zTreeStyle/img/diy/2.png"};  
  238.             if (zTree.getSelectedNodes()[0]) {  
  239.                 newNode.checked = zTree.getSelectedNodes()[0].checked;  
  240.                 zTree.addNodes(zTree.getSelectedNodes()[0], newNode);  
  241.             } else {  
  242.                 zTree.addNodes(null, newNode);  
  243.             }  
  244.         }         
  245.           
  246.         function removeDep() {  
  247.             hideRMenu();  
  248.             var nodes = zTree.getSelectedNodes();  
  249.             if (nodes && nodes.length>0) {  
  250.                 if (nodes[0].children && nodes[0].children.length > 0) {  
  251.                     var msg = "要删除的节点是父节点,如果删除将连同子节点一起删掉。\n\n请确认!";  
  252.                     if (confirm(msg)==true){  
  253.                         zTree.removeNode(nodes[0]);  
  254.                     }  
  255.                 } else {  
  256.                     zTree.removeNode(nodes[0]);  
  257.                 }  
  258.             }  
  259.         }  
  260.           
  261.         function removePos() {  
  262.             hideRMenu();  
  263.             var nodes = zTree.getSelectedNodes();  
  264.             if (nodes && nodes.length>0) {  
  265.                 if (nodes[0].children && nodes[0].children.length > 0) {  
  266.                     var msg = "要删除的节点是父节点,如果删除将连同子节点一起删掉。\n\n请确认!";  
  267.                     if (confirm(msg)==true){  
  268.                         zTree.removeNode(nodes[0]);  
  269.                     }  
  270.                 } else {  
  271.                     zTree.removeNode(nodes[0]);  
  272.                 }  
  273.             }  
  274.         }  
  275.           
  276.         function removeEmp() {  
  277.             hideRMenu();  
  278.             var nodes = zTree.getSelectedNodes();  
  279.             if (nodes && nodes.length>0) {  
  280.                 zTree.removeNode(nodes[0]);  
  281.             }  
  282.         }  
  283.           
  284.         $(document).ready(function(){  
  285.             $.fn.zTree.init($("#treeDemo"), setting, zNodes);  
  286.             zTree = $.fn.zTree.getZTreeObj("treeDemo");  
  287.             rMenu = $("#rMenu");  
  288.               
  289.             var cookie = $.cookie("z_tree");  
  290.             if(cookie){  
  291.                 z_tree = JSON.parse(cookie);  
  292.                   
  293.                 for(var i=0; i< z_tree.length; i++){  
  294.                     var node = zTree.getNodeByParam('id', z_tree[i])  
  295.                     zTree.expandNode(node, true)  
  296.                 }  
  297.             }  
  298.         });  
  299.         //-->  
  300.     </SCRIPT>  
  301.     <style type="text/css">  
  302.         div#rMenu {position:absolute; visibility:hidden; top:0; background-color: #555;text-align: left;padding: 2px;}  
  303.         div#rMenu ul li{  
  304.             margin: 1px 0;  
  305.             padding: 0 5px;  
  306.             cursor: pointer;  
  307.             list-style: none outside none;  
  308.             background-color: #DFDFDF;  
  309.         }  
  310.     </style>  
  311. </HEAD>  
  312.   
  313. <BODY>  
  314. <div class="content_wrap">  
  315.     <div class="zTreeDemoBackground left">  
  316.         <ul id="treeDemo" class="ztree"></ul>  
  317.     </div>  
  318. </div>  
  319. <div id="rMenu">  
  320.     <ul>  
  321.         <li id="m_addDep" onclick="addDep();">增加部门</li>  
  322.         <li id="m_editDep" onclick="editDep();">调整部门</li>  
  323.         <li id="m_addPos" onclick="addPos();">增加岗位</li>  
  324.         <li id="m_editPos" onclick="editPos();">调整岗位</li>  
  325.         <li id="m_addEmp" onclick="addEmp();">增加人员</li>  
  326.         <li id="m_delPos" onclick="removePos();">删除岗位</li>  
  327.         <li id="m_delDep" onclick="removeDep();">删除部门</li>  
  328.         <li id="m_delEmp" onclick="removeEmp();">删除人员</li>  
  329.     </ul>  
  330. </div>  
  331. </BODY>  
  332. </HTML>  
0 0
原创粉丝点击