///////////////////////////////////////
//作者:阿福,[email protected]
//时间:2003-01-26 修改时间:2003-04-17
//版本:V2.03
//名称:TreeView类
//////////////////////////////////////
/*
*更新记录
*2003-04-19 修正bug tv.hasChild()*/
function TreeView()
{
////////////////////////////////////////////////////////////////////////////////////////////
//定义图片
var sImgPath="./images/";
var aNodeImage=new Array(16);
/*
aNodeImage[0]=new Image();aNodeImage[0].src=sImgPath+"blank.gif";
aNodeImage[1]=new Image();aNodeImage[1].src=sImgPath+"doc.gif";
aNodeImage[2]=new Image();aNodeImage[2].src=sImgPath+"first_close.gif";
aNodeImage[3]=new Image();aNodeImage[3].src=sImgPath+"first_open.gif";
aNodeImage[4]=new Image();aNodeImage[4].src=sImgPath+"folderclosed.gif";
aNodeImage[5]=new Image();aNodeImage[5].src=sImgPath+"folderopen.gif";
aNodeImage[6]=new Image();aNodeImage[6].src=sImgPath+"last_close.gif";
aNodeImage[7]=new Image();aNodeImage[7].src=sImgPath+"last_open.gif";
aNodeImage[8]=new Image();aNodeImage[8].src=sImgPath+"lastnode.gif";
aNodeImage[9]=new Image();aNodeImage[9].src=sImgPath+"middle_close.gif";
aNodeImage[10]=new Image();aNodeImage[10].src=sImgPath+"middle_open.gif";
aNodeImage[11]=new Image();aNodeImage[11].src=sImgPath+"node.gif";
aNodeImage[12]=new Image();aNodeImage[12].src=sImgPath+"vertline.gif";
aNodeImage[13]=new Image();aNodeImage[13].src=sImgPath+"first_none.gif";
aNodeImage[14]=new Image();aNodeImage[14].src=sImgPath+"one_close.gif";
aNodeImage[15]=new Image();aNodeImage[15].src=sImgPath+"one_open.gif";
*/
aNodeImage[0]=new Image();aNodeImage[0].src=sImgPath+"blank.gif";
aNodeImage[1]=new Image();aNodeImage[1].src=sImgPath+"doc.gif";
aNodeImage[2]=new Image();aNodeImage[2].src=sImgPath+"one_close.gif";
aNodeImage[3]=new Image();aNodeImage[3].src=sImgPath+"one_open.gif";
aNodeImage[4]=new Image();aNodeImage[4].src=sImgPath+"folderclosed.gif";
aNodeImage[5]=new Image();aNodeImage[5].src=sImgPath+"folderopen.gif";
aNodeImage[6]=new Image();aNodeImage[6].src=sImgPath+"one_close.gif";
aNodeImage[7]=new Image();aNodeImage[7].src=sImgPath+"one_open.gif";
aNodeImage[8]=new Image();aNodeImage[8].src=sImgPath+"blank.gif";
aNodeImage[9]=new Image();aNodeImage[9].src=sImgPath+"one_close.gif";
aNodeImage[10]=new Image();aNodeImage[10].src=sImgPath+"one_open.gif";
aNodeImage[11]=new Image();aNodeImage[11].src=sImgPath+"blank.gif";
aNodeImage[12]=new Image();aNodeImage[12].src=sImgPath+"blank.gif";
aNodeImage[13]=new Image();aNodeImage[13].src=sImgPath+"blank.gif";
aNodeImage[14]=new Image();aNodeImage[14].src=sImgPath+"one_close.gif";
aNodeImage[15]=new Image();aNodeImage[15].src=sImgPath+"one_open.gif";
//定义颜色常量
// 普通文字颜色 未选中背景颜色 鼠标移上的文本颜色 未选中的文字的大小
var arr_style=new Array("#336598","#000000","#bfd8ef","#ffffff","default","#ff0000","900", "500");
// 选中文字颜色 选中背景颜色 文本鼠标 选中的文字大小
////////////////////////////////////////////////////////////////////////////////////////////
//Private
this.id="_"+(new Date().getTime());
var container=CreateTable(this.id);
var data=new Array(new Array(0,0,"默认根节点",0,0,new Array(),false,false,""));
var nodecount=0;
//Public
this.name=this;
var overobj,overid,overtag,selectedid=0;
//////////////////////////////////////////////////////////////////////////////////////////////*********************
//* 方法:add
//* 功能:添加节点
//* 输入:
//* 输出:
//********************
this.add=add;
function add(sRelative,sKey,sText,sImage)
{
//alert(sRelative);
if(getID(sKey)!=-1) //判断节点是否已经存在
{
alert("节点已经存在!");
return;
}
if(sRelative==0) //如果在根节点下面添加
{
nodecount++;
data[nodecount]=new Array(0,sKey,sText,1,0,new Array(),false,false,sImage); //在记录集中加入数据
data[0][5][data[0][4]]=nodecount; //在父节点的引用中加入ID
data[0][4]++; //父节点中子节点个数加一
}
else
{
var parentid=getID(sRelative);//首先找到父节点
//alert(parentid);alert(data);
if(parentid==-1)
{
alert("找不到指定的父节点!");
return;
}
var parentobj=data[parentid];//获得节点数组
var level=parentobj[3]+1;
nodecount++;
data[nodecount]=new Array(parentid,sKey,sText,level,0,new Array(),false,false,sImage);//添加节点
parentobj[5][parentobj[4]]=nodecount;//在父节点的子节点列表中注册
parentobj[4]++; //增加节点个数
}
}
//作者:阿福,[email protected]
//时间:2003-01-26 修改时间:2003-04-17
//版本:V2.03
//名称:TreeView类
//////////////////////////////////////
/*
*更新记录
*2003-04-19 修正bug tv.hasChild()*/
function TreeView()
{
////////////////////////////////////////////////////////////////////////////////////////////
//定义图片
var sImgPath="./images/";
var aNodeImage=new Array(16);
/*
aNodeImage[0]=new Image();aNodeImage[0].src=sImgPath+"blank.gif";
aNodeImage[1]=new Image();aNodeImage[1].src=sImgPath+"doc.gif";
aNodeImage[2]=new Image();aNodeImage[2].src=sImgPath+"first_close.gif";
aNodeImage[3]=new Image();aNodeImage[3].src=sImgPath+"first_open.gif";
aNodeImage[4]=new Image();aNodeImage[4].src=sImgPath+"folderclosed.gif";
aNodeImage[5]=new Image();aNodeImage[5].src=sImgPath+"folderopen.gif";
aNodeImage[6]=new Image();aNodeImage[6].src=sImgPath+"last_close.gif";
aNodeImage[7]=new Image();aNodeImage[7].src=sImgPath+"last_open.gif";
aNodeImage[8]=new Image();aNodeImage[8].src=sImgPath+"lastnode.gif";
aNodeImage[9]=new Image();aNodeImage[9].src=sImgPath+"middle_close.gif";
aNodeImage[10]=new Image();aNodeImage[10].src=sImgPath+"middle_open.gif";
aNodeImage[11]=new Image();aNodeImage[11].src=sImgPath+"node.gif";
aNodeImage[12]=new Image();aNodeImage[12].src=sImgPath+"vertline.gif";
aNodeImage[13]=new Image();aNodeImage[13].src=sImgPath+"first_none.gif";
aNodeImage[14]=new Image();aNodeImage[14].src=sImgPath+"one_close.gif";
aNodeImage[15]=new Image();aNodeImage[15].src=sImgPath+"one_open.gif";
*/
aNodeImage[0]=new Image();aNodeImage[0].src=sImgPath+"blank.gif";
aNodeImage[1]=new Image();aNodeImage[1].src=sImgPath+"doc.gif";
aNodeImage[2]=new Image();aNodeImage[2].src=sImgPath+"one_close.gif";
aNodeImage[3]=new Image();aNodeImage[3].src=sImgPath+"one_open.gif";
aNodeImage[4]=new Image();aNodeImage[4].src=sImgPath+"folderclosed.gif";
aNodeImage[5]=new Image();aNodeImage[5].src=sImgPath+"folderopen.gif";
aNodeImage[6]=new Image();aNodeImage[6].src=sImgPath+"one_close.gif";
aNodeImage[7]=new Image();aNodeImage[7].src=sImgPath+"one_open.gif";
aNodeImage[8]=new Image();aNodeImage[8].src=sImgPath+"blank.gif";
aNodeImage[9]=new Image();aNodeImage[9].src=sImgPath+"one_close.gif";
aNodeImage[10]=new Image();aNodeImage[10].src=sImgPath+"one_open.gif";
aNodeImage[11]=new Image();aNodeImage[11].src=sImgPath+"blank.gif";
aNodeImage[12]=new Image();aNodeImage[12].src=sImgPath+"blank.gif";
aNodeImage[13]=new Image();aNodeImage[13].src=sImgPath+"blank.gif";
aNodeImage[14]=new Image();aNodeImage[14].src=sImgPath+"one_close.gif";
aNodeImage[15]=new Image();aNodeImage[15].src=sImgPath+"one_open.gif";
//定义颜色常量
// 普通文字颜色 未选中背景颜色 鼠标移上的文本颜色 未选中的文字的大小
var arr_style=new Array("#336598","#000000","#bfd8ef","#ffffff","default","#ff0000","900", "500");
// 选中文字颜色 选中背景颜色 文本鼠标 选中的文字大小
////////////////////////////////////////////////////////////////////////////////////////////
//Private
this.id="_"+(new Date().getTime());
var container=CreateTable(this.id);
var data=new Array(new Array(0,0,"默认根节点",0,0,new Array(),false,false,""));
var nodecount=0;
//Public
this.name=this;
var overobj,overid,overtag,selectedid=0;
//////////////////////////////////////////////////////////////////////////////////////////////*********************
//* 方法:add
//* 功能:添加节点
//* 输入:
//* 输出:
//********************
this.add=add;
function add(sRelative,sKey,sText,sImage)
{
//alert(sRelative);
if(getID(sKey)!=-1) //判断节点是否已经存在
{
alert("节点已经存在!");
return;
}
if(sRelative==0) //如果在根节点下面添加
{
nodecount++;
data[nodecount]=new Array(0,sKey,sText,1,0,new Array(),false,false,sImage); //在记录集中加入数据
data[0][5][data[0][4]]=nodecount; //在父节点的引用中加入ID
data[0][4]++; //父节点中子节点个数加一
}
else
{
var parentid=getID(sRelative);//首先找到父节点
//alert(parentid);alert(data);
if(parentid==-1)
{
alert("找不到指定的父节点!");
return;
}
var parentobj=data[parentid];//获得节点数组
var level=parentobj[3]+1;
nodecount++;
data[nodecount]=new Array(parentid,sKey,sText,level,0,new Array(),false,false,sImage);//添加节点
parentobj[5][parentobj[4]]=nodecount;//在父节点的子节点列表中注册
parentobj[4]++; //增加节点个数
}
}
解决方案 »
- 关于用js定位一个div的滚动条的问题
- javascript中数字能有多少位?
- 哪个高手有好的简单的验证码的原代码发来!急!急!急!
- 清我所有来问大家个问题:如何在客户端获取datagrid中选择的行数据??
- 正则里面的[ \f\n\r\t\v]怎样理解,有没实例呢??
- JScript中的数字类型问题,急,在线等
- openModelwindow打开新窗口如何得到他的父路径
- 再线等待,一个关于控制层的显示问题。急~~~
- 在button中放入文字时如何让文字处在正中间,详情见内!
- 很难,很难,关于下拉菜单被帧遮住的问题
- 如何在子窗口关闭的时候,刷新父窗口!
- 关于window.open打开的窗口至于最上层的问题
//* 方法:setSelected
//* 功能:设置选择状态
//* 输入:关键字
//* 输出:下标
//********************
this.setSelected=setSelected;
function setSelected(ID,state)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围setSelected");
return;
}
if(selectedid!=0)
{
data[selectedid][6]=false;
}
data[ID][6]=state;
selectedid=ID;
}//*********************
//* 方法:getSelectedID
//* 功能:得到当前选择的节点的ID
//* 输入:
//* 输出:下标
//********************
this.getSelectedID=getSelectedID;
function getSelectedID()
{
return selectedid;
}//*********************
//* 方法:setExpanded
//* 功能:设置展开状态
//* 输入:关键字
//* 输出:下标
//********************
this.setExpanded=setExpanded;
function setExpanded(ID,state)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围setExpanded");
return;
}
data[ID][7]=state;
}//*********************
//* 方法:setText
//* 功能:设置节点文本
//* 输入:下标,
//* 输出:
//********************
this.setText=setText;
function setText(ID,text)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围setText");
return;
}
data[ID][2]=text;
}//*********************
//* 方法:setImage
//* 功能:设置节点图片
//* 输入:关键字
//* 输出:下标
//********************
this.setImage=setImage;
function setImage(ID,src)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围setImage");
return;
}
data[ID][8]=text;
}
//* 方法:getID
//* 功能:查找节点
//* 输入:关键字
//* 输出:下标
//********************
this.getID=getID;
function getID(sKey)
{
var i;
//alert(data);
for(i=1;i<=nodecount;i++)
{
//alert(data[i][1]);
if(data[i][1]==sKey)
{
return i;
}
}
return -1;
}//*********************
//* 方法:getChildCount
//* 功能:得到一个节点的子节点个数
//* 输入:下标
//* 输出:节点个数
//********************
this.getChildCount=getChildCount;
function getChildCount(ID)
{
if(ID<0||ID>nodecount)
{
alert("ID超出节点存在范围getChildCount");
return;
}
return data[ID][3];
}//*********************
//* 方法:getFirstSibling
//* 功能:得到第一个兄弟节点
//* 输入:下标
//* 输出:下标
//********************
this.getFirstSibling=getFirstSibling;
function getFirstSibling(ID)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围getFirstSibling");
return;
}
return data[data[ID][0]][5][0];
}//*********************
//* 方法:getImage
//* 功能:得到节点图象
//* 输入:下标
//* 输出:字符串
//********************
this.getImage=getImage;
function getImage(ID)
{
if(ID<0||ID>nodecount)
{
alert("ID超出节点存在范围getImage");
return;
}
return data[ID][7];
}//*********************
//* 方法:getKey
//* 功能:得到一个节点的关键字
//* 输入:下标
//* 输出:字符串
//********************
this.getKey=getKey;
function getKey(ID)
{
if(ID<0||ID>nodecount)
{
alert("ID超出节点存在范围getKey");
return;
}
return data[ID][1];
}//*********************
//* 方法:getLastSibling
//* 功能:得到最后一个兄弟节点
//* 输入:下标
//* 输出:下标
//********************
this.getLastSibling=getLastSibling;
function getLastSibling(ID)
{
if(ID<1||ID>nodecount)
{
alert("ID超出节点存在范围getLastSibling\n"+ID);
return;
}
var parentobj=data[data[ID][0]];
return parentobj[5][parentobj[4]-1];
}//*********************
//* 方法:getNextSibling
//* 功能:得到下一个兄弟节点
//* 输入:下标
//* 输出:下标
//********************
this.getNextSibling=getNextSibling;
function getNextSibling(ID)
{
if(ID<1||ID>nodecount) //检查参数
{
alert("ID超出节点存在范围getNextSibling");
return;
}
//得到父节点
var parentobj=data[data[ID][0]];
var nodecount=parentobj[4];
var i;
for(i=0;i<nodecount-1;i++)
{
if(parentobj[5][i]==ID)
{
return parentobj[5][i+1];
}
}
return -1;
}