- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的服务器维护,企业网站维护,网站维护服务
- (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
 
  
    
| 作者:黑客防线网安ASP维护基地 来源:黑客防线网安ASP维护基地 浏览次数:0 | 
Asp.net 2.0 的 TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作:
(1) 节点的全部打开和关闭;
TreeNode Expand(or Collapse) all
(2) 只打开一个节点(关闭其他兄弟节点)。
just one node expanded(when a client expand one node all other will collaps)
用记事本打开页面源代码,可以找到一下两个脚本引用:
<script src="/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&t=633300220640000000" type="text/javascript"></script> 
<script src="/WebUI/WebResource.axd?d=JuTdJhq3NM8Jq_RhssAkEg2&t=633300220640000000" type="text/javascript"></script> 
将"/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&t=633300220640000000"拷到地址栏尾,下载脚本,并以 .js 命名,另一个同样操作。分析第二个脚本文件,可以看到TreeView的很多客户端函数,其中关键的一个 TreeView_ToggleNode 就是客户端点击时触发的事件。
要想做个性化的操作,就得从 TreeView_ToggleNode 事件下手。我们无法更改.net封装好的脚本,只有“重写”。所谓的重写就是在原来的函数之后添加一个同名函数(因为js对于同名函数只调用最后一个)。
TreeView_ToggleNode 的原函数:
  function TreeView_ToggleNode(data, index, node, lineType, children) { 
  var img = node.childNodes[0]; 
  var newExpandState; 
  try { 
  if (children.style.display == "none") { 
  children.style.display = "block"; 
  newExpandState = "e"; 
  if ((typeof(img) != "undefined") && (img != null)) { 
  if (lineType == "l") { 
  img.src = data.images[15]; 
  } 
  else if (lineType == "t") { 
  img.src = data.images[12]; 
  } 
  else if (lineType == "-") { 
  img.src = data.images[18]; 
  } 
  else { 
  img.src = data.images[5]; 
  } 
  img.alt = data.collapseToolTip.replace(/\{0\}/, TreeView_GetNodeText(node)); 
  } 
  } 
  else { 
  children.style.display = "none"; 
  newExpandState = "c"; 
  if ((typeof(img) != "undefined") && (img != null)) { 
  if (lineType == "l") { 
  img.src = data.images[14]; 
  } 
  else if (lineType == "t") { 
  img.src = data.images[11]; 
  } 
  else if (lineType == "-") { 
  img.src = data.images[17]; 
  } 
  else { 
  img.src = data.images[4]; 
  } 
  img.alt = data.expandToolTip.replace(/\{0\}/, TreeView_GetNodeText(node)); 
  } 
  } 
  } 
  catch(e) {} 
  data.expandState.value = data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1); 
  } 
1. 节点的全部打开和关闭:
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>LeftMenu_Tree</title> 
</head> 
<body bgcolor="#DDEDFD"> 
    <form id="form1" runat="server"> 
        <a href="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>', true)">Expand 
            All</a> <a href="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>', false)"> 
                Collapse All</a> 
        <asp:TreeView ID="TreeView1" SkinID="tvClass" runat="server" ShowLines="true" NodeWrap="false"> 
        </asp:TreeView> 
    </form> 
</body> 
</html> 
<script language="javascript"> 
//----------------------------------------------------------------------------- 
function $(s){return document.getElementById(s);} 
function isNull(_sVal){return (_sVal == "" || _sVal == null || _sVal == "undefined");} 
function TreeviewExpandCollapseAll(treeViewId, expandAll) 
{ 
    var displayState = (expandAll == true ? "none" : "block"); 
    var treeView = $(treeViewId); 
    if(treeView) 
    { 
        var treeLinks = treeView.getElementsByTagName("a"); 
        var nodeCount = treeLinks.length; 
        var flag = true; 
        for(i=0;i<nodeCount;i++) 
        { 
            if(treeLinks[i].firstChild.tagName) 
            { 
                if(treeLinks[i].firstChild.tagName.toLowerCase() == "img") 
                { 
                    var node = treeLinks[i]; 
                    var level = parseInt(node.id.substr(node.id.length - 1),10); 
                    var childContainer = GetParentByTagName("table", node).nextSibling; 
                    if(!isNull(childContainer)) 
                    { 
                        if(flag) 
                        { 
                            if(childContainer.style.display == displayState) 
                            { 
                                TreeView_ToggleNode(eval(treeViewId +"_Data"),level,node,'r',childContainer); 
                            } 
                            flag = false; 
                        } 
                        else 
                        { 
                            if(childContainer.style.display == displayState) 
                            { 
                                TreeView_ToggleNode(eval(treeViewId +"_Data"),level,node,'l',childContainer); 
                            } 
                        } 
                    } 
                } 
            } 
        }//for loop ends 
    } 
} 
function GetParentByTagName(parentTagName, childElementObj) 
{ 
    var parent = childElementObj.parentNode; 
    while(parent.tagName.toLowerCase() != parentTagName.toLowerCase()) 
    { 
        parent = parent.parentNode; 
    } 
    return parent; 
} 
//----------------------------------------------------------------------------- 
</script> 
| 我要申请本站:N点 | 黑客防线官网 | | 
| 专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |