Javascript 获取Treeview 选中的节点(C#选中CheckBox项)
博客地址:http://www.cnblogs.com/jying/archive/2012/12/31/2840728.html
方法网上有很多,试了一下都有瑕疵。最后找了个看上去代码比较少,比较顺眼的,测试结果报错说有几个函数不存在,于是设置断点调试,各个属性查找有用的字段,终于找到。
现整理如下:
首先,要想在javascript中获取treeview中带checkbox的节点,需要设置treeview节点的某些属性,我是在后台代码中添加的。
TreeNode newNode = new TreeNode(); newNode.Text = “showText”; newNode.Value =id; newNode.NavigateUrl = id; // 可用来在javascript中获取需要的value或text值 newNode.ShowCheckBox = true; //显示checkbox newNode.Expanded = false; //节点折叠 newNode.Checked = true; //checkbox选中
获取Treeview带Input控件的节点:
var tree = document.getElementById("treenameOrid").getElementsByTagName("input");
上边设置的是checkbox,所以tree选出的就是带checkbox的项。它不同于
var treeitem = document.getElementById("treenameorid");
不可遍历直接获取text和value;
获取Treeview中Checkbox选中的节点,通常作为一个判断条件:
if (tree[i].type == "checkbox" && tree[i].checked) {内容}
获取各个节点需要的值:
var s = tree[i].nextSibling.pathname;
发现这个费了我不少脑细胞。要用此属性获取值,必须设置属性newNode.NavigateUrl = 需要的值;
好啦,现在给出一个javascript的完整代码:
var idlist; function GeSelectedNode() { var getAllNodes = ""; idlist = new Array(); //实例化数组 var tree = document.getElementById("treenameOrid").getElementsByTagName("input"); for (var i = 0; i < tree.length; i++) { if (tree[i].type == "checkbox" && tree[i].checked) { var s = tree[i].nextSibling.pathname; //要用此属性获取值,必须设置属性newNode.NavigateUrl = 需要的值; getAllNodes += s + '/'; idlist.push(s); //将值添加入数组最后一项; } } alert(tree.length); alert(getAllNodes); }
现在,运行起来,看看是不是你需要的结果,如果不对,别忘了设断点调试哦。
以上是之前的拙见,后来发现了一个bug。
因为NavigateUrl是用来导航到链接地址的,所以,如果设置该值后,当点击treeview节点时会跳转报错,但因为本人当时的程序treeviewnode.text="<a>123</a>"所以没有发现这个问题,后来经别人提意见才发现,实在抱歉诸位。
如果像我一样把节点的text赋值在<a>标签下倒也可以,但有时为了美观,会用到ImageUrl属性(显示节点图标),这样必然会出现点击图标时额外的跳转,所以NavigateUrl已不是一个好的选择。
好,现在我们来解决这个问题:
后台cs://newNode.NavigateUrl = id; 改为:newNode.ToolTip = id;
前台原来的:var s = tree[i].nextSibling.pathname; 改为:var s = tree[i].title;
欢迎大家继续拍砖~~~