166 lines
5.5 KiB
HTML
166 lines
5.5 KiB
HTML
<!DOCTYPE html>
|
||
<HTML>
|
||
<HEAD>
|
||
<TITLE> ZTREE DEMO - single path</TITLE>
|
||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||
<link rel="stylesheet" href="../../../css/demo.css" type="text/css">
|
||
<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
|
||
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
|
||
<script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
|
||
<!-- <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
|
||
<script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
|
||
<SCRIPT type="text/javascript">
|
||
<!--
|
||
var setting = {
|
||
view: {
|
||
dblClickExpand: false,
|
||
showLine: false
|
||
},
|
||
data: {
|
||
simpleData: {
|
||
enable: true
|
||
}
|
||
},
|
||
callback: {
|
||
beforeExpand: beforeExpand,
|
||
onExpand: onExpand,
|
||
onClick: onClick
|
||
}
|
||
};
|
||
|
||
function createNodes(maxNodesNumInLevel, maxLevel, curLevel, curPId) {
|
||
if (maxNodesNumInLevel<5) {
|
||
maxNodesNumInLevel = 5;
|
||
}
|
||
var nodes = [], num = 0;
|
||
while(num<3) {
|
||
num = parseInt(Math.random()*1024)%maxNodesNumInLevel+1;
|
||
}
|
||
for (var i=0; i<num; i++) {
|
||
var id = curPId ? curPId + "-" + i : "" + i, isParent = (parseInt(Math.random()*9999)%3!=0),
|
||
node = {id: id, pId : curPId, name : "N" + id};
|
||
nodes.push(node);
|
||
if (isParent && curLevel<maxLevel) {
|
||
nodes = nodes.concat(createNodes(maxNodesNumInLevel, maxLevel, curLevel+1, id));
|
||
}
|
||
}
|
||
return nodes;
|
||
}
|
||
var zNodes =createNodes(5, 5, 0);
|
||
|
||
var curExpandNode = null;
|
||
function beforeExpand(treeId, treeNode) {
|
||
var pNode = curExpandNode ? curExpandNode.getParentNode():null;
|
||
var treeNodeP = treeNode.parentTId ? treeNode.getParentNode():null;
|
||
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
|
||
for(var i=0, l=!treeNodeP ? 0:treeNodeP.children.length; i<l; i++ ) {
|
||
if (treeNode !== treeNodeP.children[i]) {
|
||
zTree.expandNode(treeNodeP.children[i], false);
|
||
}
|
||
}
|
||
while (pNode) {
|
||
if (pNode === treeNode) {
|
||
break;
|
||
}
|
||
pNode = pNode.getParentNode();
|
||
}
|
||
if (!pNode) {
|
||
singlePath(treeNode);
|
||
}
|
||
|
||
}
|
||
function singlePath(newNode) {
|
||
if (newNode === curExpandNode) return;
|
||
|
||
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
|
||
rootNodes, tmpRoot, tmpTId, i, j, n;
|
||
|
||
if (!curExpandNode) {
|
||
tmpRoot = newNode;
|
||
while (tmpRoot) {
|
||
tmpTId = tmpRoot.tId;
|
||
tmpRoot = tmpRoot.getParentNode();
|
||
}
|
||
rootNodes = zTree.getNodes();
|
||
for (i=0, j=rootNodes.length; i<j; i++) {
|
||
n = rootNodes[i];
|
||
if (n.tId != tmpTId) {
|
||
zTree.expandNode(n, false);
|
||
}
|
||
}
|
||
} else if (curExpandNode && curExpandNode.open) {
|
||
if (newNode.parentTId === curExpandNode.parentTId) {
|
||
zTree.expandNode(curExpandNode, false);
|
||
} else {
|
||
var newParents = [];
|
||
while (newNode) {
|
||
newNode = newNode.getParentNode();
|
||
if (newNode === curExpandNode) {
|
||
newParents = null;
|
||
break;
|
||
} else if (newNode) {
|
||
newParents.push(newNode);
|
||
}
|
||
}
|
||
if (newParents!=null) {
|
||
var oldNode = curExpandNode;
|
||
var oldParents = [];
|
||
while (oldNode) {
|
||
oldNode = oldNode.getParentNode();
|
||
if (oldNode) {
|
||
oldParents.push(oldNode);
|
||
}
|
||
}
|
||
if (newParents.length>0) {
|
||
zTree.expandNode(oldParents[Math.abs(oldParents.length-newParents.length)-1], false);
|
||
} else {
|
||
zTree.expandNode(oldParents[oldParents.length-1], false);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
curExpandNode = newNode;
|
||
}
|
||
|
||
function onExpand(event, treeId, treeNode) {
|
||
curExpandNode = treeNode;
|
||
}
|
||
|
||
function onClick(e,treeId, treeNode) {
|
||
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
|
||
zTree.expandNode(treeNode, null, null, null, true);
|
||
}
|
||
|
||
$(document).ready(function(){
|
||
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
|
||
});
|
||
//-->
|
||
</SCRIPT>
|
||
<style type="text/css">
|
||
.ztree li button.switch {visibility:hidden; width:1px;}
|
||
.ztree li button.switch.roots_docu {visibility:visible; width:16px;}
|
||
.ztree li button.switch.center_docu {visibility:visible; width:16px;}
|
||
.ztree li button.switch.bottom_docu {visibility:visible; width:16px;}
|
||
</style>
|
||
</HEAD>
|
||
|
||
<BODY>
|
||
<h1>Keep Single Path</h1>
|
||
<h6>[ File Path: super/singlepath.html ]</h6>
|
||
<div class="content_wrap">
|
||
<div class="zTreeDemoBackground left">
|
||
<ul id="treeDemo" class="ztree"></ul>
|
||
</div>
|
||
<div class="right">
|
||
<ul class="info">
|
||
<li class="title"><h2>Explanation of implementation method</h2>
|
||
<ul class="list">
|
||
<li>This Demo is the transformation from "Click to Expand Node" demo, tree only expand single path.</li>
|
||
<li class="highlight_red">Use 'setting.callback.beforeExpand / onExpand' callback function to achieve rules about expand </li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</BODY>
|
||
</HTML> |