卓越2008

用一颗谦虚的心面对大家,用一颗坚定的心面对困难,用一颗执著的心面对理想,用一颗虔诚的心面对技术。

导航

用js来管理treeview上的部门于权限分配

Posted on 2007-04-13 18:46  Casm  阅读(572)  评论(0)    收藏  举报

 

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;