您的位置:首页 > Web前端 > JavaScript

(javascript,treeview)treeview通过checkbox来进行全选单选

2007-09-10 15:03 776 查看
from:http://blog.csdn.net/netjxz/archive/2007/07/18/1696552.aspx

Treeview如何支持全选和单选,以及获取相关的节点id值,经过自己的修改改为针对3级目录,其中提供选择的是2和3级目录,我的代码如下(其中还需要一个selectID的hidden input控件)

1

2 //根据已选择的节点的字符串初始化选择的节点

3 function findAndCheckedNodes(NodeArray,nodeDatas)

4 {

5 if(parseInt(NodeArray.length)==0)

6 {

7 return;

8 }

9 else

10 {

11 for(var i=0;i<parseInt(NodeArray.length);i++)

12 {

13 var cNode,nodeData;

14 cNode=NodeArray[i];

15 ////如果该节点在nodeDatas里则初始化checked = true;

16 nodeData = cNode.getAttribute("NodeData");

17 for(var j=0;j<nodeDatas.length;j++)

18 {

19 if(nodeDatas[j] == nodeData)

20 {

21 cNode.setAttribute("checked","true");

22 break;

23 }

24 }

25 //如果有子节点,则继续递归

26 if(parseInt(cNode.getChildren().length)!=0)

27 findAndCheckedNodes(cNode.getChildren(),nodeDatas);

28 }

29 }

30 }

31

32 //节点的oncheck事件

33 function tree_oncheck(tree)

34 {

35 var node=tree.getTreeNode(tree.clickedNodeIndex);

36 var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");

37 setcheck(node,Pchecked);

38 setParent(node,Pchecked);//如果是选择那么选择其父接点.

39 document.getElementById('selectID').value ='';

40 FindCheckedFromNode(TvwCategorys);

41 }

42 //设置子节点选中

43 function setcheck(node,Pc)

44 {

45 var i;

46 var ChildNode=new Array();

47 ChildNode=node.getChildren();

48

49 if(parseInt(ChildNode.length)==0)

50 return;

51 else

52 {

53 for(i=0;i<ChildNode.length;i++)

54 {

55 var cNode;

56 cNode=ChildNode[i];

57 if(parseInt(cNode.getChildren().length)!=0)

58 setcheck(cNode,Pc);

59 cNode.setAttribute("checked",Pc);

60 }

61 }

62 }

63 //获取所有节点状态

64 function FindCheckedFromNode(node)

65 {

66 var i = 0;

67 var nodes = new Array();

68 nodes = node.getChildren();

69

70 for (i = 0; i < nodes.length; i++)

71 {

72 var cNode;

73 cNode=nodes[i];

74 if (cNode.getAttribute("checked"))

75 AddChecked(cNode);

76 else

77 AddUnChecked(cNode);

78

79 if (parseInt(cNode.getChildren().length) != 0 )

80 {

81 FindCheckedFromNode(cNode);

82 }

83 }

84 }

85 //添加选中节点

86 function AddChecked(node)

87 {

88 var selectID = document.getElementById("selectID").value;

89 if(node.getAttribute("Type") =="sub" && selectID.indexOf(node.getAttribute("NodeData"))<0)

90 document.getElementById("selectID").value += node.getAttribute("NodeData")+",";

91 }

92 //添加未选中节点

93 function AddUnChecked(node)

94 {

95 var selectID = document.getElementById("selectID").value;

96 if(node.getAttribute("Type") =="sub" && selectID.indexOf(node.getAttribute("NodeData"))>=0)

97 selectedID.replace(","+curID+",",",");

98 document.getElementById("selectID").value = selectID;

99 }

//设置子节点选中/取消;

//同时需要设置父节点的状态(如果是取消选中的话,仅仅设置本节点及其所有字接点,不涉及父接点)

function setParent(node,Pc)

{

var parentNode = node.getParent();

if(parentNode)

{

var parentNodeFather = parentNode.getParent();

if(parentNodeFather)

{

setParent(parentNode,Pc);

}

if(Pc)

{parentNode.setAttribute("checked",Pc);}

else

{

checkBrother(parentNode,Pc,node.getAttribute("NodeData"))

}

}

}

//检查子接点是否有选择的,如果有一个选择了,那返回true

//只查第一级节点.

function checkBrother(parentNode,Pc,nodeData)

{

var childNodes = new Array();

childNodes = parentNode.getChildren();

if(childNodes.length >0)

{

var bChecked = true;

for(var i=0;i<childNodes.length;i++)

{

if(childNodes[i].getAttribute("checked") == true && childNodes[i].getAttribute("NodeData") != nodeData)

{

//alert(i+childNodes[i].getAttribute("Text"));

bChecked = false;

break;

}

}

if(bChecked)

{

parentNode.setAttribute("checked",Pc);

}

else

{

//所有父结点选择

setParent(parentNode,!Pc)

}

}

else

{

parentNode.setAttribute("checked",Pc);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: