(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);
}
}
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);
}
}
相关文章推荐
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选
- javascript 操作treeview的checkbox加载、全选、全不选、以及光标回焦问题
- 用JS(JavaScript)来进行对Struts的Html:checkbox或者html:multibox进行全选、及其他控制
- Javascript 实现TreeView CheckBox全选效果
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选
- asp.net2.0下利用javascript实现treeview中的checkbox全选
- 用javascript实现treeview上的checkbox全选功能
- asp.net2.0下利用javascript实现treeview中的checkbox全选
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选!
- 利用JavaScript 控制CheckBoxList来进行 全选与不选
- GridView中通过js对CheckBox进行全选
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选!
- jquery通过prop来对checkbox进行全选
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选 (支持IE/firefox)
- Javascript 实现TreeView CheckBox全选效果
- 解决TreeView中使用JavaScript完成CheckBox全选的办法
- ASP.NET2.0下利用javascript实现TreeView中的checkbox全选
- (转)解决TreeView中使用JavaScript完成CheckBox全选的办法
- GridView中CheckBox实现全选与反选的Javascript脚本
- 使用javascript实现ListBox左右全选,单选,多选,全请