我的树是通过C#后台代码生成的,容器是TreeView。现在点击树的某一节点要得到该树的所有父节点。请问如何实现?

解决方案 »

  1.   

    [MyNode].onclick = function(e){
      var t = e.target || e.srcElement, list = [];
      while(t = t.parentNode)
         list.push(t);
    }
      

  2.   

    没有用啊  
       
     function client_OnTreeNode(event) 
          {//得到当前所 Click 的对象,并做相应的处理
         
          var objNode;
          if (!public_IsObjectNull(event.srcElement))
           {//IE        
           objNode= event.srcElement; 
            }
        else 
        {
        //FF        
        objNode= event.target; 
        }
        if (!public_IsNode(objNode))
        return;     var type = event.srcElement.tagName;
                if (type == 'A') {
                    window.dialogArguments.getElementById('Text1').value = event.srcElement.innerText;               [这里要写TreeView还是type ].onclick = function(e){   var t = e.target || e.srcElement, list = [];   while(t = t.parentNode)     list.push(t); }                 window.close();
    }   
    }
    //判断对象是否为空
        function public_IsObjectNull(element) 
        {
            if (element==null|| element=="undefined")
            return true;
            else
            return false; 
            }
    //判断对象是否为 节点
      function public_IsNode(element) 
      {
        if (public_IsObjectNull(element))
            return false;    if (element.tagName == "A" && element.children.length == 0)
            return true;
        else
            return false;
        }
    我这样写可以么?
      

  3.   

    结合我贴出的JS代码。onclick事件已经注册有了。2楼的代码不知道写在哪好
      

  4.   

    用jquery吧,简单,$(elem).parents();elem是点击的结点,以上简单一行就将所有父节点获取出来了。
      

  5.   

    function client_OnTreeNode(event) {
        var parents = event.srcElement ? $(event.srcElement).parents() : $(event.target).parents();
        
        // 对 parents 的操作
    }
      

  6.   

    回楼上的朋友,我用alert弹出parents,不管我上面有几个节点。都是显示[object object]这样的信息
      

  7.   

    function client_OnTreeNode(event) 
          {//得到当前所 Click 的对象,并做相应的处理
         
          var objNode;
          if (!public_IsObjectNull(event.srcElement))
           {//IE        
           objNode= event.srcElement; 
            }
        else 
        {
        //FF        
        objNode= event.target; 
        }
        if (!public_IsNode(objNode))
        return;     var type = event.srcElement.tagName;
                if (type == 'A') {
                    window.dialogArguments.getElementById('Text1').value = event.srcElement.innerText;               var  list = []; 
      while(objNode = objNode.parentNode) 
        list.push(objNode);
                    window.close();
    }   
    }
    //判断对象是否为空
        function public_IsObjectNull(element) 
        {
            if (element==null|| element=="undefined")
            return true;
            else
            return false; 
            }
    //判断对象是否为 节点
      function public_IsNode(element) 
      {
        if (public_IsObjectNull(element))
            return false;    if (element.tagName == "A" && element.children.length == 0)
            return true;
        else
            return false;
        }
      

  8.   

    回shan1119这位朋友,如何得到节点的值,我这样得到的都是object对象,而且我点击父节点也会显示该父节点有上层节点。
      

  9.   


    是的,因为它是一个jquery对象,你可以 
    parents.each(function(elem){
        alert(elem);
    });
      

  10.   

    回shan1119朋友,我点击最上面的父节点,得到12个object
      

  11.   


    噢,这是索引值,你可以直接用this来访问当前遍历的元素parents.each(function(){
        alert(this);
    });
      

  12.   

    一直得到的都是object类型。我想得到节点上的显示值
      

  13.   

    view your TreeView and get the attribute what you want to get from the parentnode
      

  14.   

    谁有空帮我看看啊,就2个aspx页面,很小
      

  15.   


    //这个是树页面
    public partial class input : System.Web.UI.Page
    {
        string strString = "";
        private static string connString = "server=.;uid=sa;pwd=sa2005;database=information";
        private static SqlConnection conn = new SqlConnection(connString);
        DataTable table = new DataTable();
        TreeNode node = new TreeNode();
        //private static string tablename = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!IsPostBack)
            {
                this.TreeView1.Nodes.Clear();
                SqlDataAdapter sda = new SqlDataAdapter("select * from E10_BBS_List", conn);
                sda.Fill(table);
                AddNode(node, table);
                TreeView1.Nodes.Add(node);
                TreeView1.Attributes.Add("onclick", "client_OnTreeNode(event)");
               
            }
        }    //生成树结构
        private void AddNode(TreeNode objTreeNode, DataTable table)
        {
            TreeNode node = new TreeNode();
            int lNode = 0;
            int lColumn = 0;
            int lDeep = 0;
            while (table.Rows.Count > lNode)
            {
              
                DataRow dw = table.Rows[lNode];
                bool isNewLine = true;            lColumn = 0;            while (dw.ItemArray.Length > lColumn)
                {
                    if (lNode == 0)
                    {
                        //node.SelectAction = no;
                        node.Expanded = false;                    node = new TreeNode(table.Rows[lNode][lColumn].ToString(), table.Columns[lColumn].ColumnName.ToString());
                        objTreeNode.ChildNodes.Add(node);
                        lDeep = lColumn;
                        objTreeNode = node;
                        isNewLine = true;
                    }
                    else if (table.Rows[lNode - 1][lColumn].ToString() != dw.ItemArray[lColumn].ToString() | isNewLine == true)
                    {
                        node.Expanded = false;                    int lNodeforDeep = 0;
                        for (lNodeforDeep = lColumn; lNodeforDeep <= lDeep; lNodeforDeep++)
                        {
                            objTreeNode = objTreeNode.Parent;
                        }                    node = new TreeNode(table.Rows[lNode][lColumn].ToString(), table.Columns[lColumn].ColumnName.ToString());
                        objTreeNode.ChildNodes.Add(node);
                        lDeep = lColumn;
                        objTreeNode = node;                    isNewLine = true;
                    }                lColumn += 1;            }            isNewLine = false;
                lNode += 1;
            }
        }
    }//这个是主页面,该页面上有个TXT文本框,点击文本框弹出树页面,点击树的某一节点,把该节点的所有父节点传到主页面的TXT文本框上,JS代码在上面已经给出。多谢各位帮助!
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <base target="_self" />
        <title>无标题页</title>
        <script language="javascript" type="text/javascript">
    //        function show()
    //        {
    //              window.showModalDialog("input.aspx");
    //              //window.open('input.aspx', 'newwindow', 'height=500, width=500, top=100, left=400, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')  
    //        }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <div>
           
            <input id="Text1" type="text"  runat="server" onclick="showModalDialog('input.aspx', window.document)" readonly="readOnly" /></div>
        </form>
    </body>
    </html>
      

  16.   


    //input页面的HTML代码,主页面无HTML代码
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="input.aspx.cs" Inherits="input" %><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <base target="_self" />
        <title>信息</title>
    <%--    <script type="text/javascript" src="input.js"></script>--%> 
    <script language="javascript" src="jquery-1.3.2.js" type="text/javascript"></script>
       <script language="javascript" type="text/javascript">   
          function client_OnTreeNode(event) 
          {
          
    //       var parents = event.srcElement ? $(event.srcElement).parents() : $(event.target).parents(); 
    //           parents.each(function(elem){ 
    //    alert(this);
    //});
          //得到当前所 Click 的对象,并做相应的处理
          var objNode;
          if (!public_IsObjectNull(event.srcElement))
           {//IE        
           objNode= event.srcElement; 
            }
        else 
        {
        //FF        
        objNode= event.target; 
        }
        if (!public_IsNode(objNode))
        return;
         var type = event.srcElement.tagName;
         
         if (type == 'A') 
            {
            
                      var parents = event.srcElement ? $(event.srcElement).parents() : $(event.target).parents(); 
            alert(parents);
                    window.dialogArguments.getElementById('Text1').value = event.srcElement.innerText;
                    var list = []; 
                    while(objNode = objNode.parentNode) list.push(objNode.value);
                    alert(list);
                    window.close();
                    
            }
    }  //判断对象是否为空
        function public_IsObjectNull(element) 
        {
            if (element==null|| element=="undefined")
            return true;
            else
            return false; 
         }
    //判断对象是否为 节点
      function public_IsNode(element) 
      {
        if (public_IsObjectNull(element))
            return false;    if (element.tagName == "A" && element.children.length == 0)
        
            return true;
        else
            return false;
      }</script>
        
    </head>
    <body >    <form id="form1" runat="server">
        <div>
            <br />
            <asp:TreeView ID="TreeView1" runat="server">
            </asp:TreeView>
        </div>
        </form>
    </body>
    </html>
      

  17.   

    真晕啊 这么久还没搞定
    要JS操作 那你就别用控件 
    用了控件你就应该用控件的server端 ONCLICK操作事件  在配合。NET的AJAX框架 来实现页面操作
    不然你不是自己搞自己脑子
      

  18.   

    用TreeView控件
    点击事件 循环 不就可以了?for (int i = 0; i < TreeView.Nodes.Count; i++)
    {
       if (TreeView.Nodes[i].ChildNodes.Count > 0)
       { 
       }
    }
      

  19.   

    哥们,我也不想这样啊,项目需求就是这样搞起的
    回LS的朋友,TREEVIEW自带的事件在这里都会无效
      

  20.   

    要搞清楚,服务器端控件treeview到达客户端后,被解析成什么样子了。才能去获取他的上级。
    在服务器端去遍历要方便
      

  21.   

    我正在看。被解析成一个Div里面包含Table.节点信息都在Table里面
      

  22.   


    <div id="TreeView1n0Nodes" style="display:block;">
    <table cellpadding="0" cellspacing="0" style="border-width:0;">
    <tr>
    <td><div style="width:20px;height:1px"></div></td><td><a id="TreeView1n1" href="javascript:TreeView_ToggleNode(TreeView1_Data,1,TreeView1n1,' ',TreeView1n1Nodes)"><img src="/TreeUI/WebResource.axd?d=ZhYmBDlJHDZAP26bhDMyhqDTwDJXcWwRz618DglkQdM1&amp;t=633986617041406250" alt="展开 6" style="border-width:0;" /></a></td><td style="white-space:nowrap;"><a class="TreeView1_0" href="javascript:__doPostBack('TreeView1','s\\id')" onclick="TreeView_SelectNode(TreeView1_Data, this,'TreeView1t1');" id="TreeView1t1">6</a></td>
    </tr>
    </table>
    控件解析到客户端呈现的样式,请问如何得到id=TreeView1n0Nodes里面的6