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; 

欢迎大家继续拍砖~~~

个人小站欢迎来踩:驾校教练评价平台 | 为爱豆砌照片墙

  

原文地址:https://www.cnblogs.com/jying/p/2840728.html