有那位高人知道asp2.0中用javascript如何循环的去读取treeview中所有父节点的value和text(只有两层,没有根,不读取树叶)

解决方案 »

  1.   

    这个只要知道treeview 的节点的ID生成规律就okle。
    treeview 的节点的ID 生成后都是 treeview 的 ID + "n" + 节点的序号如:
    treeview的ID "treeview1"    前面那个图片的ID        节点ID                      
    ****                        "treeview1" + "n" + 0   "treeview1" + "t" + 0
      ****                      "treeview1" + "n" + 1   "treeview1" + "t" + 1
        ****                    "treeview1" + "n" + 2   "treeview1" + "t" + 1
        ****                    "treeview1" + "n" + 3   "treeview1" + "t" + 1
      ****                      "treeview1" + "n" + 4   "treeview1" + "t" + 1
    ****                        "treeview1" + "n" + 5   "treeview1" + "t" + 1
      ****                      "treeview1" + "n" + 6   "treeview1" + "t" + 1 
      ****                      "treeview1" + "n" + 7   "treeview1" + "t" + 1
      

  2.   

    靠! 这个CSDN 我的打的空格怎么都没了 treeview的ID "treeview1" 前面那个图片的ID 节点ID
    **** "treeview1" + "n" + 0 "treeview1" + "t" + 0
    --**** "treeview1" + "n" + 1 "treeview1" + "t" + 1
    --**** "treeview1" + "n" + 2 "treeview1" + "t" + 1
    ----**** "treeview1" + "n" + 3 "treeview1" + "t" + 1
    --**** "treeview1" + "n" + 4 "treeview1" + "t" + 1
    **** "treeview1" + "n" + 5 "treeview1" + "t" + 1
    --**** "treeview1" + "n" + 6 "treeview1" + "t" + 1
    --**** "treeview1" + "n" + 7 "treeview1" + "t" + 1
      

  3.   

    // JScript 文件
    //<asp:TreeView ID="treeView1" runat="server" ShowCheckBoxes="All" ShowLines="true" onclick="client_OnTreeNodeChecked();">
    //使用类JTreeView时要包含 SysScript.js 文件
    //
    //function OnTreeNodeClientChecked( treeObj)
    {
        if( treeObj != null ) {
            var id = treeObj.id;
            var tree = new JTreeView(id);
            tree.parentChecked();
        }
    }function OnTreeClearChecked( treeID) {
        var tree = new JTreeView( treeID )
        tree.clearChecked();
    }function OnSelectSingleNode(treeID, node) {
        alert(node.id);
        var tree = new JTreeView( treeID )
        tree.selectSingleNode(node.id);    
    }/*================================= 链接类 JTreeView{ ===================================*/
    function JTreeView()
    {
        this.id = '';
    }
    function JTreeView( id ) {
        this.id = id;
    }JTreeView.prototype.initialize = function(id) {
        this.id = id;
    }JTreeView.prototype.exists = function() {  
        if(this.id.isNullOrEmpty()){
            alert('请给树对象赋值进行初始化!');
            return false;
        }
        
        var treeViewObj = document.getElementById( this.id );
        if(treeViewObj  == null ) {
            alert('系统不能找到树!');
            return false;
        }
        return true;
    }JTreeView.prototype.clearChecked = function() { //clear all checked = 'true' status, and the result is all status of these checkboxes is false 
        if(this.exists()) {
         var treeViewObj = document.getElementById( this.id );
            var tables = treeViewObj.getElementsByTagName("TABLE");
            var tableNum = tables.length;
            if(tableNum > 0) {
                for(var i = 0; i < tableNum; ++i) {
                    var childTreeLevel = tables[i].rows[0].cells.length;
                    var cell = tables[i].rows[0].cells[childTreeLevel - 1];
                    var inputs = cell.getElementsByTagName("INPUT");
                    inputs[0].checked = false;
                }
            }   
        } 
    } JTreeView.prototype.selectNode = function ( nodeID ) {
        if(this.exists()) {
            var node = document.getElementById( nodeID ) ;
            if(node != null) {
                //find the parent object(TD) of the node
                var parent = node.parentElement;
                if(parent != null && parent.tagName == 'TD') {
                    var inputs = parent.getElementsByTagName("INPUT");
                    inputs[0].checked = true;
                }
            }        
        } 
    }JTreeView.prototype.selectSingleNode = function ( nodeID ) {
        this.clearChecked();
        this.selectNode(nodeID );
    }JTreeView.prototype.parentChecked = function() {  //parent node check event
        var obj = window.event.srcElement;
        var treeNodeFound = false;
        var checkedState;
        if (obj.tagName == "INPUT" && obj.type == "checkbox") 
        {
            var treeNode = obj;
            checkedState = treeNode.checked;
            
            //查找checkBox所在的TABLE对象
            do
            {
                obj = obj.parentElement;
            } 
            while (obj.tagName != "TABLE")
         
            //checkBox所在TABLE对象的属性        var parentTreeLevel = obj.rows[0].cells.length;  //Table中的列数
            var parentTreeNode = obj.rows[0].cells[0];       //Table中的第一列TD对象   
            var tables = obj.parentElement.getElementsByTagName("TABLE");  //查找此事件对象TABLE的同级及下级的TABLE对象
            var numTables = tables.length;  //Table总数
            if (numTables >= 1)
            {
                for (i=0; i < numTables; i++)
                {
                    if (tables[i] == obj)
                    {
                        treeNodeFound = true;
                        i++;  //指针移动到下一个Table对象
                        if (i == numTables)
                        {
                            return;
                        }
                    }
                    if (treeNodeFound == true)
                    {
                        var childTreeLevel = tables[i].rows[0].cells.length;
                        if (childTreeLevel > parentTreeLevel)
                        {
                            var cell = tables[i].rows[0].cells[childTreeLevel - 1];
                            var inputs = cell.getElementsByTagName("INPUT");
                            inputs[0].checked = checkedState;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }
        }
    }/*================================= }链接类 JTreeView ===================================*/
      

  4.   

    呵呵,jincan11(一只死猫),你的方法我用不上,谢谢!!
      

  5.   

    可以参考下面的执行。下面的文件直接存成tree.aspx,可以运行,看效果<%@ Page Language="C#" %>
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        TreeView1.Attributes.Add("onclick", "OnClientTreeNodeChecked(event)");
      }
      protected void Button1_Click(object sender, EventArgs e)
      {
        if (Request.Form["CheckedNode"] != null)
        {
          string CheckedNodeValue = Request.Form["CheckedNode"];
          if (CheckedNodeValue == "")
            return;
          
          if (CheckedNodeValue.EndsWith(","))
            CheckedNodeValue = CheckedNodeValue.TrimEnd(',');
        
          Response.Write("您选择的节点有:"+CheckedNodeValue);
        }
      } 
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>客户端实现全选子节点</title>
      <script type="text/javascript" language="javascript">
      //识别不同的浏览器
      function getTargetElement(evt) {
        var elem
        if (evt.target)
        {
          elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target
        } 
        else 
        {
          elem = evt.srcElement
        }
        return elem
      }  function OnClientTreeNodeChecked(evt)
      {
        evt = (evt) ? evt : ((window.event) ? window.event : "");
        if(evt == "")
        {
          return;
        }
        var obj = getTargetElement(evt);
        var hasTreeNode = false;
        if(obj.tagName)
        {
          if (obj.tagName == "INPUT" && obj.type == "checkbox") {
            var treeNode = obj;
            while (obj.tagName != "TABLE")
            {
              obj = obj.parentNode;
            }
            var parentTreeDeep = obj.rows[0].cells.length;
            var parentTreeNode = obj.rows[0].cells[0];
            var oDiv = obj.parentNode;
            if( null == oDiv )
            {
              return;
            }
            if( 1 != oDiv.nodeType)
            {
              return;
            }
            var tables = oDiv.getElementsByTagName("TABLE");
            if( null == tables)
            {
              return;
            }
            var tableCount = tables.length;
            if(tableCount < 1)
            {
              return;
            }    
            for (i = 0; i < tableCount; i++)
            {
              if ( obj == tables[i] )
              {
                hasTreeNode = true;
                i++;
                if (tableCount == i )
                {
                  return;
                }
              }
              if (hasTreeNode)
              {
                var childTreeDeep = tables[i].rows[0].cells.length;
                if (childTreeDeep > parentTreeDeep)
                {
                  var cellTreeNode = tables[i].rows[0].cells[childTreeDeep - 1];
                  var inputs = cellTreeNode.getElementsByTagName("INPUT");
                  if( null != inputs)
                  {
                    inputs[0].checked = treeNode.checked;
                  }
                }
                else
                {
                  return;
                }
              }
            }
          }
        }
      }  
      function ShowCheckbox()
      { 
        var TreeView = "<%=TreeView1.ClientID %>"
        var checkNode = document.getElementById("CheckedNode")
        var checkboxs = document.getElementById(TreeView).getElementsByTagName("INPUT")
        for(i=0;i<checkboxs.length;i++)
        {
          if(checkboxs[i].type == "checkbox" 
            &&  checkboxs[i].name.substr(0,TreeView.length) == TreeView
            && checkboxs[i].checked )
          {
            checkNode.value += checkboxs[i].title + ","
          }
        }
      }
      </script>
    </head>
    <body>
      <form id="form1" runat="server">
        <asp:TreeView ID="TreeView1" runat="server" ShowLines="true"
          ShowCheckBoxes="All">
          <Nodes>
            <asp:TreeNode Text="【孟子E章】站点一" SelectAction="SelectExpand">
              <asp:TreeNode Text="ASP.NET技术">
                <asp:TreeNode Text="缓存管理"/>
                <asp:TreeNode Text="状态管理" />
                <asp:TreeNode Text="导航控件">
                  <asp:TreeNode Text="Menu 服务器控件" />
                  <asp:TreeNode Text="SiteMapPath 服务器控件" />
                </asp:TreeNode>
              </asp:TreeNode>
              <asp:TreeNode Text="C#技术" />
            </asp:TreeNode>
            <asp:TreeNode Text="【孟子E章】站点二" />
            <asp:TreeNode Text="【孟子E章】站点三">
              <asp:TreeNode Text="Web开发技术" />
              <asp:TreeNode Text="Web脚本库" />
            </asp:TreeNode>
          </Nodes>
        </asp:TreeView>
        <input type="hidden" name="CheckedNode"  id="CheckedNode"/>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" 
          OnClientClick="ShowCheckbox()" Text="提交" />
      </form>
    </body>
    </html>
      

  6.   

    谢谢,并且更正一下我得checkbox在根上,只选择根。其他一律不管。我开始说没有根是错误的。
      

  7.   

    net_lover(【孟子E章】)你好,你的方法我的不到选中某个节点的value只能得到text
      

  8.   

    asp.net 2.0的TreeView和以前的不一样了。取得value,只能自己从href里解析的
      

  9.   

    奥,谢谢net_lover(【孟子E章】) !!!
      

  10.   

    大致做法
    <%@ Page Language="C#" %>
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        TreeView1.Attributes.Add("onclick", "OnClientTreeNodeChecked(event)");
      }
      protected void Button1_Click(object sender, EventArgs e)
      {
        if (Request.Form["CheckedNode"] != null)
        {
          string CheckedNodeValue = Request.Form["CheckedNode"];
          if (CheckedNodeValue == "")
            return;
          
          if (CheckedNodeValue.EndsWith(","))
            CheckedNodeValue = CheckedNodeValue.TrimEnd(',');
        
          Response.Write("您选择的节点有:"+CheckedNodeValue);
        }
      } 
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title>客户端实现全选子节点</title>
      <script type="text/javascript" language="javascript">
      //识别不同的浏览器
      function getTargetElement(evt) {
        var elem
        if (evt.target)
        {
          elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target
        } 
        else 
        {
          elem = evt.srcElement
        }
        return elem
      }  function OnClientTreeNodeChecked(evt)
      {
        evt = (evt) ? evt : ((window.event) ? window.event : "");
        if(evt == "")
        {
          return;
        }
        var obj = getTargetElement(evt);
        var hasTreeNode = false;
        if(obj.tagName)
        {
          if (obj.tagName == "INPUT" && obj.type == "checkbox") {
            var treeNode = obj;
            while (obj.tagName != "TABLE")
            {
              obj = obj.parentNode;
            }
            var parentTreeDeep = obj.rows[0].cells.length;
            var parentTreeNode = obj.rows[0].cells[0];
            var oDiv = obj.parentNode;
            if( null == oDiv )
            {
              return;
            }
            if( 1 != oDiv.nodeType)
            {
              return;
            }
            var tables = oDiv.getElementsByTagName("TABLE");
            if( null == tables)
            {
              return;
            }
            var tableCount = tables.length;
            if(tableCount < 1)
            {
              return;
            }    
            for (i = 0; i < tableCount; i++)
            {
              if ( obj == tables[i] )
              {
                hasTreeNode = true;
                i++;
                if (tableCount == i )
                {
                  return;
                }
              }
              if (hasTreeNode)
              {
                var childTreeDeep = tables[i].rows[0].cells.length;
                if (childTreeDeep > parentTreeDeep)
                {
                  var cellTreeNode = tables[i].rows[0].cells[childTreeDeep - 1];
                  var inputs = cellTreeNode.getElementsByTagName("INPUT");
                  if( null != inputs)
                  {
                    inputs[0].checked = treeNode.checked;
                  }
                }
                else
                {
                  return;
                }
              }
            }
          }
        }
      }  
      function ShowCheckbox()
      { 
        var TreeView = "<%=TreeView1.ClientID %>"
        var checkNode = document.getElementById("CheckedNode")
        var checkboxs = document.getElementById(TreeView).getElementsByTagName("INPUT")
        for(i=0;i<checkboxs.length;i++)
        {
          if(checkboxs[i].type == "checkbox" 
            &&  checkboxs[i].name.substr(0,TreeView.length) == TreeView
            && checkboxs[i].checked )
          {
            s = checkboxs[i].nextSibling.href
            if(s.indexOf("\\") == -1)
            {        
              s = s.substr(0,s.lastIndexOf("'"))
              s  = s.substr(s.lastIndexOf("'")+2)
            }
            else
            {
             s = s.substr(s.lastIndexOf("\\") + 1,s.lastIndexOf("'") - s.lastIndexOf("\\") - 1)
            }
       
            checkNode.value += s + ","
          }
        }
        alert("得到的value值为:\r\n" + checkNode.value)
      }
      </script>
    </head>
    <body>
      <form id="form1" runat="server">
        <asp:TreeView ID="TreeView1" runat="server" ShowLines="true"
          ShowCheckBoxes="All">
          <Nodes>
            <asp:TreeNode Text="【孟子E章】站点一" SelectAction="SelectExpand" Value="AA">
              <asp:TreeNode Text="ASP.NET技术" Value="11111111111111111111111">
                <asp:TreeNode Text="缓存管理" Value="222222222"/>
                <asp:TreeNode Text="状态管理"  Value="33333"/>
                <asp:TreeNode Text="导航控件" Value="444">
                  <asp:TreeNode Text="Menu 服务器控件" />
                  <asp:TreeNode Text="SiteMapPath 服务器控件" />
                </asp:TreeNode>
              </asp:TreeNode>
              <asp:TreeNode Text="C#技术" />
            </asp:TreeNode>
            <asp:TreeNode Text="【孟子E章】站点二" />
            <asp:TreeNode Text="【孟子E章】站点三">
              <asp:TreeNode Text="Web开发技术" />
              <asp:TreeNode Text="Web脚本库" />
            </asp:TreeNode>
          </Nodes>
        </asp:TreeView>
        <input type="hidden" name="CheckedNode"  id="CheckedNode"/>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" 
          OnClientClick="ShowCheckbox()" Text="提交" />
      </form>
    </body>
    </html>
      

  11.   

    你好:net_lover(【孟子E章】)
    你给我得方法中,为啥有这样的情况,当我选择了两个根节点的时候,总会出项两次返回结果,第一个是我选中的第一个节点的value,第二个是我选中的两个节点的Value
      

  12.   

    好死心眼啊。
    干吗非要用javascript读取treeview数据啊。
    treeview是服务器控件,每次点击都回去取数据的。
    比如treeview是从数据库中某个表中提取出来的,那就简单了。直接把数据库中的数据直接在页面上生成一个javascript数组不就行了么。
    然后直接取javascript数组中的数据多方便。