Asp.net 2.0的TreeView客户端个性化控制

2018 年 6 月 7 日3600
本文导航

<<返回分页阅读

1

  Asp.net 2.0TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作:

  (1) 节点的全部打开和关闭;

  TreeNode Expand(or Collapse) all

  (2) 只打开一个节点(关闭其他兄弟节点)。

  just one node expanded(when a client expand one node all other will collaps)

  用记事本打开页面源代码,可以找到一下两个脚本引用:

以下是引用片段:
<scriptsrc="/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&amp;t=633300220640000000"type="text/javascript"></script>
<scriptsrc="/WebUI/WebResource.axd?d=JuTdJhq3NM8Jq_RhssAkEg2&amp;t=633300220640000000"type="text/javascript"></script>

  将"/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&t=633300220640000000"拷到地址栏尾,下载脚本,并以 .js 命名,另一个同样操作。分析第二个脚本文件,可以看到TreeView的很多客户端函数,其中关键的一个 TreeView_ToggleNode 就是客户端点击时触发的事件。

  要想做个性化的操作,就得从 TreeView_ToggleNode 事件下手。我们无法更改.net封装好的脚本,只有“重写”。所谓的重写就是在原来的函数之后添加一个同名函数(因为js对于同名函数只调用最后一个)。

  TreeView_ToggleNode 的原函数:

以下是引用片段:
  functionTreeView_ToggleNode(data,index,node,lineType,children){
  varimg=node.childNodes[0];
  varnewExpandState;
  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];
  }
  elseif(lineType=="t"){
  img.src=data.images[12];
  }
  elseif(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];
  }
  elseif(lineType=="t"){
  img.src=data.images[11];
  }
  elseif(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. 节点的全部打开和关闭:

以下是引用片段:
<htmlxmlns="http://http://www.zjjv.com///1999/xhtml">
<headrunat="server">
<title>LeftMenu_Tree</title>
</head>
<bodybgcolor="#DDEDFD">
<formid="form1"runat="server">
<ahref="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>',true)">Expand
All</a><ahref="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>',false)">
CollapseAll</a>
<asp:TreeViewID="TreeView1"SkinID="tvClass"runat="server"ShowLines="true"NodeWrap="false">
</asp:TreeView>
</form>
</body>
</html>

<scriptlanguage="javascript">
//-----------------------------------------------------------------------------
function$(s){returndocument.getElementById(s);}
functionisNull(_sVal){return(_sVal==""||_sVal==null||_sVal=="undefined");}

functionTreeviewExpandCollapseAll(treeViewId,expandAll)
{
vardisplayState=(expandAll==true?"none":"block");
vartreeView=$(treeViewId);
if(treeView)
{
vartreeLinks=treeView.getElementsByTagName("a");
varnodeCount=treeLinks.length;
varflag=true;
for(i=0;i<nodeCount;i++)
{
if(treeLinks[i].firstChild.tagName)
{
if(treeLinks[i].firstChild.tagName.toLowerCase()=="img")
{
varnode=treeLinks[i];
varlevel=parseInt(node.id.substr(node.id.length-1),10);
varchildContainer=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);
}
}
}
}
}
}//forloopends
}
}

functionGetParentByTagName(parentTagName,childElementObj)
{
varparent=childElementObj.parentNode;
while(parent.tagName.toLowerCase()!=parentTagName.toLowerCase())
{
parent=parent.parentNode;
}
returnparent;
}
//-----------------------------------------------------------------------------
</script>

2

  

2. 只打开一个节点(关闭其他兄弟节点)

以下是引用片段:
<htmlxmlns="http://http://www.zjjv.com///1999/xhtml">
<headrunat="server">
<title>LeftMenu_Tree</title>
</head>
<bodybgcolor="#DDEDFD">
<formid="form1"runat="server">
<ahref="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>',true)">Expand
All</a>,<ahref="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>',false)">
CollapseAll</a>
<asp:TreeViewID="TreeView1"SkinID="tvClass"runat="server"ShowLines="true"NodeWrap="false">
</asp:TreeView>
</form>
</body>
</html>

<scriptlanguage="javascript">
//2.只打开一个节点(关闭其他兄弟节点)------------------------------------------
functionTreeView_ToggleNode(data,index,node,lineType,children)
{
varimg=node.childNodes[0];
varnewExpandState;
try{
//***折叠兄弟节点------------------------
CollapseBrothers(data,children);
//---------------------------------------

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];
}
elseif(lineType=="t")
{
img.src=data.images[12];
}
elseif(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];
}
elseif(lineType=="t")
{
img.src=data.images[11];
}
elseif(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);
}

//折叠兄弟节点
functionCollapseBrothers(data,childContainer)
{
varparent=childContainer.parentNode;
for(i=0;i<parent.childNodes.length;i++)
{
if(parent.childNodes[i].tagName.toLowerCase()=="div")
{
if(parent.childNodes[i].id!=childContainer.id)
{
parent.childNodes[i].style.display="none"
}
}
elseif(parent.childNodes[i].tagName.toLowerCase()=="table")
{
vartreeLinks=parent.childNodes[i].getElementsByTagName("a");
if(treeLinks.length>2)
{
varj=0;
if(treeLinks[j].firstChild.tagName)
{
if(treeLinks[j].firstChild.tagName.toLowerCase()=="img")
{
varimg=treeLinks[j].firstChild;
if(i==0)
img.src=data.images[8];
elseif(i==parent.childNodes.length-2)
img.src=data.images[14];
else
img.src=data.images[11];
}
}
}
}
}
}
//-----------------------------------------------------------------------------
</script>

  点击查看原文>>

(作者:吴锋的博客责任编辑:幽灵)

请关注天极网

天极新媒体最酷科技资讯

扫码赢大奖

相关文章

评论

* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!

0 0