|
|
Posted on
2007-04-13 18:46
Casm
阅读( 572)
评论()
收藏
举报
function TreeExpand(cid,hidd) //节点展开
  {
var nodeIndex = document.all.tree1.clickedNodeIndex;
var clickNode = tree1.getTreeNode(nodeIndex);
var curNodeId = clickNode.getAttribute("id");
var id = curNodeId.split('.');
id[0] = "t";
id[1] = "1";
clickNode.setAttribute("id",id[0] + "." + id[1] + "." + id[2] + "." + id[3]);
var childNode = clickNode.getChildren();
var i;
if (clickNode.getAttribute("Checked"))
 {
for (i = 0; i < childNode.length; i++)
 {
childNode[i].setAttribute("Checked",true);
}
}
else
 {
for (i = 0; i < childNode.length; i++)
 {
childNode[i].setAttribute("Checked",false);
}
}
}

function TreeCollapse(cid,hidd) //节点收拢
  {
var nodeIndex = document.all.tree1.clickedNodeIndex;
var clickNode = tree1.getTreeNode(nodeIndex);
var curNodeId = clickNode.getAttribute("id");
var id = curNodeId.split('.');
id[1] = "0";
clickNode.setAttribute("id",id[0] + "." + id[1] + "." + id[2] + "." + id[3]);
}
function docheck(cid,hidd)
  {
var nodeIndex = document.all.tree1.clickedNodeIndex;
var clickNode = tree1.getTreeNode(nodeIndex);
if (clickNode.getAttribute("Checked")) //选中
 {
NodeChecked(clickNode,cid,hidd); //选中节点
}
else //取消选择
 {
NodeUnChecked(clickNode,cid,hidd); //取消节点选择
}
}

function NodeChecked(node,cid,hidd) //选中某一节点
  {
AnnalOneNode(node,cid,hidd,true); //纪录一个节点
ChangeNodeState(node,true); //选中一个节点
SetChildNode(node,cid,hidd,true); //设置子节点状态
SetParentNode(node,cid,hidd,true); //设置父节点状态
}

function NodeUnChecked(node,cid,hidd) //选中某一节点
  {
AnnalOneNode(node,cid,hidd,false); //纪录一个节点
ChangeNodeState(node,false); //选中一个节点
SetChildNode(node,cid,hidd,false); //设置子节点状态
SetParentNode(node,cid,hidd,false); //设置父节点状态
}

function SetParentNode(node,cid,hidd,flag) //设置父节点状态
  {
pNode = node.getParent();
if (flag)
 {
if (IsChildChecked(pNode))
 {
NodeChecked(pNode,cid,hidd);
}
}
else
 {
CheckOneNodeParent(node,cid,hidd,false);
}
}

function CheckOneNodeParent(node,cid,hidd,flag)
  {
pNode = node.getParent();
var i;
while (pNode != null && pNode.getAttribute("Checked"))
 {
var subNodes = pNode.getChildren();
tNodeUnChecked(pNode,cid,hidd,false);
for (i = 0; i < subNodes.length; i++)
 {
if (subNodes[i].getAttribute("id") != node.getAttribute("id"))
 {
NodeChecked(subNodes[i],cid,hidd)
}
}
CheckOneNodeParent(pNode,cid,hidd,false);
}
}

function tNodeUnChecked(node,cid,hidd,flag) //取消选择
  {
var pText = node.getAttribute("text");
pText = RTrim(pText);
var pId = node.getAttribute("id");
var id = pId.split('.');
if (id[2] == "node") //如果节点是部门
 {
pText = "{" + pText + "}";
pId = "{" + id[3] + "}";
}
else
 {
pId = id[3];
}
remove_value(cid,hidd,pText,pId);
ChangeNodeState(node,false);
}

function CheckOneNodeChild(node,flag,flag1) //选中某一节点的子节点
  {
node.setAttribute("Checked",flag);
var child = node.getChildren();
var i;
if (flag1)
 {
for (i = 0; i < child.length; i++)
 {
child[i].setAttribute("Checked",flag);
}
}
}

function IsChildChecked(pNode) //判断子节点是否都被选中
  {
if (pNode != null)
 {
var checkCount = 0,i = 0;
childNodes = pNode.getChildren();
for (; i < childNodes.length; i++)
 {
if (childNodes[i].getAttribute("Checked"))
 {
checkCount++;
}
}
if (checkCount == childNodes.length)
 {
return true; //兄弟节点全部被选中
}
}
return false; //兄弟节点没有全部被选中,或则没有父节点
}

function AnnalOneNode(node,cid,hidd,flag) //纪录或取消节点纪录
  {
var pText = node.getAttribute("text");
pText = RTrim(pText);
var pId = node.getAttribute("id");
var id = pId.split('.');
if (id[2] == "node") //如果节点是部门
 {
pText = "{" + pText + "}";
pId = "{" + id[3] + "}";
}
else
 {
pId = id[3];
}
if (flag)
 {
add_value(cid,hidd,pText + "," + pId + ",");
}
else
 {
remove_value(cid,hidd,pText,pId);
}
}

function ChangeNodeState(node,flag) //改变节点状态
  {
node.setAttribute("Checked",flag);
}

function SetChildNode(node,cid,hidd,flag) //设置子节点
  {
SetChildNodeState(node,flag); //改变子节点状态
RemoveChildRecord(node,cid,hidd) //移除被纪录过的子节点
}

function RemoveChildRecord(node,cid,hidd) //移除某一节点所有子节点的纪录
  {
var childNodes = node.getChildren();
if (childNodes != null && IsExpanded(node))
 {
var i = 0;
if (childNodes.length == 0)
 {
return;
}
while (i < childNodes.length)
 {
var curNodeText = childNodes[i].getAttribute("text");
curNodeText = RTrim(curNodeText);
var curNodeId = childNodes[i].getAttribute("id");
var id = curNodeId.split('.');
curNodeId = id[id.length - 1];
if (id[2] == "node") //如果节点是部门
 {
curNodeText = "{" + curNodeText + "}";
curNodeId = "{" + curNodeId + "}";
}
else
 {
curNodeId = id[3];
}
remove_value(cid,hidd,curNodeText,curNodeId); //移除当前节点的数据
RemoveChildRecord(childNodes[i],cid,hidd);
i++;
}
}
}

function SetChildNodeState(node,flag) //设置子节点状态
  {
if (IsNodeExpand(node)) //如果该节点是被展开的才向下判断
 {
var childNodes = node.getChildren();
var i = 0;
while (i < childNodes.length) //遍历子节点
 {
ChangeNodeState(childNodes[i],flag); //改变节点状态
SetChildNodeState(childNodes[i],flag);
i++;
}
}
}

function IsNodeExpand(node) //判断节点是否被展开
  {
var isExpand = '0';
isExpand = node.getAttribute("id");
var temp = isExpand.split('.');
isExpand = temp[1];
if (isExpand == "1")
 {
return true;
}
return false;
}

function IsExpanded(node) //判断节点是否被展开过
  {
var isExpand = '0';
isExpand = node.getAttribute("id");
var temp = isExpand.split('.');
isExpand = temp[0];
if (isExpand == "t")
 {
return true;
}
return false;
}

function add_value(id,hidd,v)
  {
var ptext = window.parent.parent.document.getElementById(id);
var ptexthidd = window.parent.parent.document.getElementById(hidd);
var str = ptext.value;
var strValue = v.substring(0,v.indexOf(",")+1);
if(str == "" || str.indexOf(strValue)<0)
ptext.value += strValue;

var strhidd = ptexthidd.value;
var strHiddId = v.substring(v.indexOf(",")+1,v.length);
if(strhidd == "" || strhidd.indexOf(strHiddId)<0)
ptexthidd.value += strHiddId;
}

//移出记录
function remove_value(id,hidd,a,b)
  {
var ptext = window.parent.parent.document.getElementById(id);
var ptexthidd = window.parent.parent.document.getElementById(hidd);
var str = ptext.value;
var strhidd = ptexthidd.value;
ptext.value = str.replace(a+",","");
ptexthidd.value = strhidd.replace(b+",","");
}
function RTrim(str)
  {
var i;
for(i=str.length-1;i>=0;i--)
 {
if(str.charAt(i)!=" " && str.charAt(i)!=" ") break;
}
str = str.substring(0,i+1);
for(i=0;i<str.length;i++)
 {
if(str.charAt(i)!=" ") break;
}
str = str.substring(i,str.length);
return str;
}

//从str1中减去str2
function minusStr(str1,str2)
  {
var s1 = str1.substring(0,str1.indexOf(str2));
var s2 = str1.substring(str1.indexOf(str2)+str2.length,str1.length);
return s1+s2;
}
function killErrors()
  {
return true;
}
function tree_oncheck()
  {
var node = TreeView.getTreeNode(event.treeNodeIndex);
var Pchecked = node.getAttribute("checked");
setcheck(node, Pchecked);
TreeView.queueEvent('oncheck', node.getNodeIndex());
}

function setcheck(node, Pc)
  {
var ChildNode = new Array();
ChildNode = node.getChildren();
if (parseInt(ChildNode.length) != 0)
 {
for (var i = 0; i < ChildNode.length; i++)
 {
var cNode = ChildNode[i];
if (cNode.getAttribute("checked") != Pc)
 {
if (parseInt(cNode.getChildren().length) != 0)
setcheck(cNode, Pc);
cNode.setAttribute("checked", Pc);
TreeView.queueEvent('oncheck', cNode.getNodeIndex());
}
}
}
}
window.onerror = killErrors;
|