zoukankan      html  css  js  c++  java
  • 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; 

    欢迎大家继续拍砖~~~

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

      

  • 相关阅读:
    linux扩展分区
    linux开机出现initramfs无法进入系统
    openCV编译安装-MSCV-Windows10-Qt
    Qt一键部署配置(Qt程序打包)
    Part8 升序排序 和降序排序
    Part7-.简单查询1
    Part6-向表中插入数据
    Part5-修改表(添加字段、删除字段、查看删除是否成功)
    Part4-删除表
    Part3-复制表
  • 原文地址:https://www.cnblogs.com/jying/p/2840728.html
Copyright © 2011-2022 走看看