Treeview完美的客户端,节点状态的级联处理,递归查找被选中的所有节点<script event="onCheck" for="TreeViewModel">
var node=TreeViewModel.getTreeNode(event.treeNodeIndex);
setcheck(node);function setcheck(node)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();
//首先处理其上级节点的状态
if (!node.getAttribute("checked")) { //如果没有选中,那么其所有的父节点状态都是未选中
var ParentNode = node.getParent();
while (ParentNode != null && ParentNode.getAttribute("checked")) {
ParentNode.setAttribute("checked", "false");
ParentNode = ParentNode.getParent();
}
}
else { //如果选中,那么检查同级节点,如果都选中,那么自动选中父节点,并且再检查父节点的同级节点
//node.setAttribute("expanded", "true");
var ParentNode = node;
while ((ParentNode=ParentNode.getParent()) != null) {
var j = 0;
var BrotherNodes = new Array();
BrotherNodes = ParentNode.getChildren();
for (i = 0; i < BrotherNodes.length; i ++) {
if (BrotherNodes[i].getAttribute("checked") == true) {
j = j + 1;
}
else {
i = i + 1;
break;
}
}
if (i == j) {
ParentNode.setAttribute("checked", "true");
}
else {
break;
}
} }
//现在处理子节点,将所有子节点都选中,或者取消选中
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("checked", node.getAttribute("checked"));
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode);
}
}//从Treeview中寻找被选中的所有节点
function FindCheckedFromTree(tree) {
var i = 0;
var node;
document.Form1.Text1.value = '';
while ((node=tree.getTreeNode(i.toString(10))) != null) {
if (node.getAttribute("checked"))
AddChecked(node);
FindCheckedFromNode(node);
i = i + 1;
}
}//从一个节点寻找其中所有被选中节点(递归)
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();
//alert('Now searching ' + ': ' + node.getAttribute("Text"));
for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("checked"))
AddChecked(cNode);
if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}//标记一个节点被选中
function AddChecked(node) {
//alert(node.getAttribute("Text") + ' is checked');
document.Form1.Text1.value += node.getAttribute("Text");
}</script>
{
node = (TreeNode)node.Parent
node.Checked = false
}