📄 dhtmlxtree.js
字号:
* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
Event does not occur if node was opened by dhtmlXtree API.
* @eventparam: ID of node which will be opened/closed
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
*/
dhtmlXTreeObject.prototype.setOnOpenHandler=function(func){ this.attachEvent("onOpenStart",func); };
/**
* @desc: set function called before tree node opened/closed
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onOpenStart
* @depricated: use grid.attachEvent("onOpenStart",func); instead
* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
Event not raised if node opened by dhtmlXtree API.
* @eventparam: ID of node which will be opened/closed
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
*/
dhtmlXTreeObject.prototype.setOnOpenStartHandler=function(func){ this.attachEvent("onOpenStart",func); };
/**
* @desc: set function called after tree node opened/closed
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onOpenEnd
* @depricated: use grid.attachEvent("onOpenEnd",func); instead
* @eventdesc: Event raises immideatly after item in tree was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored.
Event not raised if node opened by dhtmlXtree API.
* @eventparam: ID of node which will be opened/closed
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened.
*/
dhtmlXTreeObject.prototype.setOnOpenEndHandler=function(func){ this.attachEvent("onOpenEnd",func); };
/**
* @desc: set function called when tree node double clicked
* @param: func - event handling function
* @type: public
* @topic: 0,7
* @event: onDblClick
* @depricated: use grid.attachEvent("onDblClick",func); instead
* @eventdesc: Event raised immideatly after item in tree was doubleclicked, before default onDblClick functionality was processed.
Beware using both onClick and onDblClick events, because component can generate onClick event before onDblClick event while doubleclicking item in tree.
( that behavior depend on used browser )
* @eventparam: ID of item which was doubleclicked
* @eventreturn: true - confirm opening/closing; false - deny opening/closing;
*/
dhtmlXTreeObject.prototype.setOnDblClickHandler=function(func){ this.attachEvent("onDblClick",func); };
/**
* @desc: expand target node and all sub nodes
* @type: public
* @param: itemId - node id
* @topic: 4
*/
dhtmlXTreeObject.prototype.openAllItems=function(itemId)
{
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
this._xopenAll(temp);
};
/**
* @desc: return open/close state
* @type: public
* @param: itemId - node id
* @return: -1 - close, 1 - opened, 0 - node doesn't have children
* @topic: 4
*/
dhtmlXTreeObject.prototype.getOpenState=function(itemId){
var temp=this._globalIdStorageFind(itemId);
if (!temp) return "";
return this._getOpenState(temp);
};
/**
* @desc: collapse target node and all sub nodes
* @type: public
* @param: itemId - node id
* @topic: 4
*/
dhtmlXTreeObject.prototype.closeAllItems=function(itemId)
{
if (itemId===window.undefined) itemId=this.rootId;
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
this._xcloseAll(temp);
//nb:solves standard doctype prb in IE
this.allTree.childNodes[0].border = "1";
this.allTree.childNodes[0].border = "0";
};
/**
* @desc: set user data for target node
* @type: public
* @param: itemId - target node id
* @param: name - key for user data
* @param: value - user data value
* @topic: 5
*/
dhtmlXTreeObject.prototype.setUserData=function(itemId,name,value){
var sNode=this._globalIdStorageFind(itemId,0,true);
if (!sNode) return;
if(name=="hint")
sNode.htmlNode.childNodes[0].childNodes[0].title=value;
if (typeof(sNode.userData["t_"+name])=="undefined"){
if (!sNode._userdatalist) sNode._userdatalist=name;
else sNode._userdatalist+=","+name;
}
sNode.userData["t_"+name]=value;
};
/**
* @desc: get user data from target node
* @type: public
* @param: itemId - target node id
* @param: name - key for user data
* @return: value of user data
* @topic: 5
*/
dhtmlXTreeObject.prototype.getUserData=function(itemId,name){
var sNode=this._globalIdStorageFind(itemId,0,true);
if (!sNode) return;
return sNode.userData["t_"+name];
};
/**
* @desc: get node color (text color)
* @param: itemId - id of node
* @type: public
* @return: color of node (empty string for default color);
* @topic: 6
*/
dhtmlXTreeObject.prototype.getItemColor=function(itemId)
{
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
var res= new Object();
if (temp.acolor) res.acolor=temp.acolor;
if (temp.acolor) res.scolor=temp.scolor;
return res;
};
/**
* @desc: set node text color
* @param: itemId - id of node
* @param: defaultColor - node color
* @param: selectedColor - selected node color
* @type: public
* @topic: 6
*/
dhtmlXTreeObject.prototype.setItemColor=function(itemId,defaultColor,selectedColor)
{
if ((itemId)&&(itemId.span))
var temp=itemId;
else
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
else {
if (temp.i_sel)
{ if (selectedColor) temp.span.style.color=selectedColor; }
else
{ if (defaultColor) temp.span.style.color=defaultColor; }
if (selectedColor) temp.scolor=selectedColor;
if (defaultColor) temp.acolor=defaultColor;
}
};
/**
* @desc: return node text
* @param: itemId - id of node
* @type: public
* @return: text of item (with HTML formatting, if any)
* @topic: 6
*/
dhtmlXTreeObject.prototype.getItemText=function(itemId)
{
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
return(temp.htmlNode.childNodes[0].childNodes[0].childNodes[3].childNodes[0].innerHTML);
};
/**
* @desc: return parent item id
* @param: itemId - id of node
* @type: public
* @return: id of parent item
* @topic: 4
*/
dhtmlXTreeObject.prototype.getParentId=function(itemId)
{
var temp=this._globalIdStorageFind(itemId);
if ((!temp)||(!temp.parentObject)) return "";
return temp.parentObject.id;
};
/**
* @desc: change item id
* @type: public
* @param: itemId - old node id
* @param: newItemId - new node id
* @topic: 4
*/
dhtmlXTreeObject.prototype.changeItemId=function(itemId,newItemId)
{
if (itemId==newItemId) return;
var temp=this._globalIdStorageFind(itemId);
if (!temp) return 0;
temp.id=newItemId;
temp.span.contextMenuId=newItemId;
this._idpull[newItemId]=this._idpull[itemId];
delete this._idpull[itemId];
};
/**
* @desc: mark selected item as cut
* @type: public
* @topic: 2
*/
dhtmlXTreeObject.prototype.doCut=function(){
if (this.nodeCut) this.clearCut();
this.nodeCut=(new Array()).concat(this._selected);
for (var i=0; i<this.nodeCut.length; i++){
var tempa=this.nodeCut[i];
tempa._cimgs=new Array();
tempa._cimgs[0]=tempa.images[0];
tempa._cimgs[1]=tempa.images[1];
tempa._cimgs[2]=tempa.images[2];
tempa.images[0]=tempa.images[1]=tempa.images[2]=this.cutImage;
this._correctPlus(tempa);
}
};
/**
* @desc: insert previously cut branch
* @param: itemId - id of new parent node
* @type: public
* @topic: 2
*/
dhtmlXTreeObject.prototype.doPaste=function(itemId){
var tobj=this._globalIdStorageFind(itemId);
if (!tobj) return 0;
for (var i=0; i<this.nodeCut.length; i++){
if (this._checkPNodes(tobj,this.nodeCut[i])) continue;
this._moveNode(this.nodeCut[i],tobj);
}
this.clearCut();
};
/**
* @desc: clear cut
* @type: public
* @topic: 2
*/
dhtmlXTreeObject.prototype.clearCut=function(){
for (var i=0; i<this.nodeCut.length; i++)
{
var tempa=this.nodeCut[i];
tempa.images[0]=tempa._cimgs[0];
tempa.images[1]=tempa._cimgs[1];
tempa.images[2]=tempa._cimgs[2];
this._correctPlus(tempa);
}
this.nodeCut=new Array();
};
/**
* @desc: move node with subnodes
* @type: private
* @param: itemObject - moved node object
* @param: targetObject - new parent node
* @topic: 2
*/
dhtmlXTreeObject.prototype._moveNode=function(itemObject,targetObject){
return this._moveNodeTo(itemObject,targetObject);
}
/**
* @desc: fix order of nodes in collection
* @type: private
* @param: target - parent item node
* @param: zParent - before node
* @edition: Professional
* @topic: 2
*/
dhtmlXTreeObject.prototype._fixNodesCollection=function(target,zParent){
var flag=0; var icount=0;
var Nodes=target.childNodes;
var Count=target.childsCount-1;
if (zParent==Nodes[Count]) return;
for (var i=0; i<Count; i++)
if (Nodes[i]==Nodes[Count]) { Nodes[i]=Nodes[i+1]; Nodes[i+1]=Nodes[Count]; }
// Count=target.childsCount;
for (var i=0; i<Count+1; i++)
{
if (flag) {
var temp=Nodes[i];
Nodes[i]=flag;
flag=temp;
}
else
if (Nodes[i]==zParent) { flag=Nodes[i]; Nodes[i]=Nodes[Count]; }
}
};
/**
* @desc: recreate branch
* @type: private
* @param: itemObject - moved node object
* @param: targetObject - new parent node
* @param: level - top level flag
* @param: beforeNode - node for sibling mode
* @mode: mode - DragAndDrop mode (0 - as child, 1 as sibling)
* @edition: Professional
* @topic: 2
*/
dhtmlXTreeObject.prototype._recreateBranch=function(itemObject,targetObject,beforeNode,level){
var i; var st="";
if (beforeNode){
for (i=0; i<targetObject.childsCount; i++)
if (targetObject.childNodes[i]==beforeNode) break;
if (i!=0)
beforeNode=targetObject.childNodes[i-1];
else{
st="TOP";
beforeNode="";
}
}
var t2=this._onradh; this._onradh=null;
var newNode=this._attachChildNode(targetObject,itemObject.id,itemObject.label,0,itemObject.images[0],itemObject.images[1],itemObject.images[2],st,0,beforeNode);
//copy user data
newNode._userdatalist=itemObject._userdatalist;
newNode.userData=itemObject.userData.clone();
newNode.XMLload=itemObject.XMLload;
if (t2){
this._onradh=t2; this._onradh(newNode.id); }
for (var i=0; i<itemObject.childsCount; i++)
this._recreateBranch(itemObject.childNodes[i],newNode,0,1);
return newNode;
}
/**
* @desc: move single node
* @type: private
* @param: itemObject - moved node object
* @param: targetObject - new parent node
* @mode: mode - DragAndDrop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -