to sandsworlf(安):javascript不能和数据库直接打交道,如果要把数据库中的记录直接反映到显示的树中你必须要有一张节点表包含相应的节点信息。然后用jsp或asp等服务器脚本语言把相应的信息放到html中,你可以写一个相应的方法和我的程序相连。
to Fengxiubing2000(FXB):可以改,不过你要把其中的方法xg_GetChildren改一下还有把相应节点对象xg_TreeNode中的nodeIsView改为1,看一下注解吧!
你可以展开任意层次的东西。
//***********************************************************************************************************************
//--- Function: control the view of the tree
//--- Return:
//--- Parameters:
//--- ANodeID: the node to be clicked
//--- AImg: the AImg object stand by with the node
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function div_viewOnclick(ANodeID,AImg){
with(xgTree){
if (0==xg_GetNodeCount(xgTree,ANodeID)) return;
var tmpNode=xg_TreeSearch(xgTree,ANodeID);
for (var i=0;i<xg_TreeArray.length;i++){
if (ANodeID==xg_TreeArray[i].nodeParentID){
if (0==tmpNode.nodeIsView)
eval(xg_TreeArray[i].nodeDivID+".style.display='inline';");
else
eval(xg_TreeArray[i].nodeDivID+".style.display='none';");
}
}
if (0==tmpNode.nodeIsView){
tmpNode.nodeIsView=1;
AImg.src='OUTMINUS.BMP';
} else{
tmpNode.nodeIsView=0;
AImg.src='OUTPLUS.BMP';
}
}
}
//***********************************************************************************************************************
function img_onmouseover(AImg){
AImg.style.filter='alpha(opacity=40)';
}
//***********************************************************************************************************************
function img_onmouseout(AImg){
AImg.style.filter='alpha(opacity=100)';
}
//***********************************************************************************************************************
</script>
</HEAD>
<BODY>
<form name="fmTree" method="post">
<script language=javascript>
var xgTree=new xg_Tree();
for (var i=0;i<10;i++){
var xgTreeNode=new xg_TreeNode(i+1,"<a href='temp1.html' target='_blank'>"+"接点"+(i+1)+"</a>",0,"xgDiv"+(i+1));
xgTree.xg_TreeInsert(xgTreeNode);
}
刚刚自己写了一个,没有层次限制的树,给你看看有什么建议尽管提,不过你最好找几个图片代替我的图片谢谢
<HTML>
<HEAD>
<TITLE> xg_delayth's Tree </TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language=javascript>
//***********************************************************************************************************************
//--- Function: the define of tree's node object
//--- Return:
//--- Parameters:
//--- ANodeID: the nodeID of the treeNode
//--- ANodeInnerHtml: view in the node_div
//--- ANodeParentID: the nodeID of the parentNode,if it is the root node the ANodeParentID is "-1"
//--- ANodeDivID: the id of the node_div
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_TreeNode(ANodeID,ANodeInnerHtml,ANodeParentID,ANodeDivID){
this.nodeID=ANodeID;
this.nodeInnerHtml=ANodeInnerHtml;
this.nodeParentID=ANodeParentID;
this.nodeDivID=ANodeDivID;
//-- if 0 not view the children else if 1 view the children
this.nodeIsView=0;
}
//***********************************************************************************************************************
//--- Function: the define of xg_Tree
//--- Return:
//--- Parameters:
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_Tree(){
//-- store the information about the tree
this.xg_TreeArray=new Array();
//-- create the root node
this.xg_TreeArray[0]=new xg_TreeNode(0,"根节点",-1,"xgDiv0");
//-- store the tree_node number
this.xg_ArrayCount=1;
this.xg_TreeInsert=xg_TreeInsert;
this.xg_TreeSearch=xg_TreeSearch;
this.xg_TreeDelete=xg_TreeDelete;
this.xg_GetNodeCount=xg_GetNodeCount;
}
//***********************************************************************************************************************
//--- Function: insert a node into the tree
//--- Return:
//--- Parameters:
//--- ATreeNode: the new node to insert into the tree
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_TreeInsert(ATreeNode){
with(this){
//-- if ATreeNode is null or it's parentid is null or it's id had been in tree return -1;
if (!ATreeNode || ""==xg_TreeSearch(this,ATreeNode.nodeParentID) || ""!=xg_TreeSearch(this,ATreeNode.nodeID)){
return -1;
}
xg_TreeArray[xg_ArrayCount]=ATreeNode;
xg_ArrayCount++;
}
}
//***********************************************************************************************************************
//--- Function: search the node by the nodeID inputed
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree insert
//--- ANodeID: the nodeID about the searching node
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_TreeSearch(AXGTree,ANodeID){
with(AXGTree){
for (var i=0;i<xg_TreeArray.length;i++){
if (xg_TreeArray[i].nodeID==ANodeID){
return xg_TreeArray[i];
}
}
return "";
}
}
//***********************************************************************************************************************
//--- Function: Get children's count
//--- Return: the count of the number of children
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the parentnode's nodeID
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_GetNodeCount(AXGTree,ANodeID){
with(AXGTree){
var childCount=0;
for (var i=0;i<xg_ArrayCount;i++){
if (xg_TreeArray[i].nodeParentID==ANodeID){
childCount++;
}
}
return childCount;
}
}
//***********************************************************************************************************************
//--- Function: delete the node of the tree and it's children by recursion
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the node to be deleted
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_TreeDelete(AXGTree,ANodeID){
with(AXGTree){
while(1==1){
if (0==xg_GetNodeCount(AXGTree,ANodeID)){ //-- if no children be found
for (var i=0;i<xg_TreeArray.length;i++){
//-- wipe off the delete_node
if (xg_TreeArray[i].nodeID==ANodeID){
for (var j=i+1;j<xg_TreeArray.length;j++){
xg_TreeArray[j-1]=xg_TreeArray[j];
}
//-- reduce the length of the array
xg_TreeArray.pop();
AXGTree.xg_ArrayCount--;
}
}
return ;
} else{ //-- if children be found,delete the children by recursion
for (var i=0;i<xg_ArrayCount;i++){
if (xg_TreeArray[i].nodeParentID==ANodeID){
xg_TreeDelete(AXGTree,xg_TreeArray[i].nodeID);
}
}
}
}
}
}
//***********************************************************************************************************************
//--- Function: make the show table
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_ShowTree(AXGTree){
var tmpOut="";
tmpOut+="<table align=left>";
tmpOut+="<tr><td>";
tmpOut+=xg_GetChildren(AXGTree,0,0);
tmpOut+="</td></tr>";
tmpOut+="</table>";
return tmpOut;
}
//***********************************************************************************************************************
//--- Function: make the show div by recursion
//--- Return:
//--- Parameters:
//--- AXGTree: the object of xg_Tree
//--- ANodeID: the root nodeID
//--- ALevel: the level the div
//--- Create time: 2002-08-12 Change time: 2002-08-12
//--- Create Programer: xg_delayth Change Programer: xg_delayth
function xg_GetChildren(AXGTree,ANodeID,ALevel){
var tmpNode=xg_TreeSearch(AXGTree,ANodeID);
var tmpOut="";
with(tmpNode){
tmpOut+="<div id='"+nodeDivID+"' nodeID='"+nodeID+"' style='display:none;'>";
tmpOut+="<br>";
for (var i=0;i<ALevel;i++){
tmpOut+=" ";
}
tmpOut+="<img id='img"+tmpNode.nodeID+"' onmouseover='img_onmouseover(this);' onmouseout='img_onmouseout(this);' ";
if (0==xg_GetNodeCount(AXGTree,ANodeID)){
tmpOut+="src='OUTOPEN.BMP' ";
} else{
tmpOut+="src='OUTPLUS.BMP' ";
}
tmpOut+="width='16' height='16' onclick='div_viewOnclick("+nodeID+",this)' style='color:blue;cursor:hand;'> ";
tmpOut+=nodeInnerHtml;
for (var i=0;i<AXGTree.xg_TreeArray.length;i++){
if (ANodeID==AXGTree.xg_TreeArray[i].nodeParentID){
tmpOut+=xg_GetChildren(AXGTree,AXGTree.xg_TreeArray[i].nodeID,ALevel+1);
}
}
tmpOut+="</div>";
}
return tmpOut;
}