惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
Jina AI
Jina AI
H
Help Net Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
L
LangChain Blog
Recorded Future
Recorded Future
F
Full Disclosure
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ
GbyAI
GbyAI
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
M
MIT News - Artificial intelligence
爱范儿
爱范儿
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
B
Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
MongoDB | Blog
MongoDB | Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
The Cloudflare Blog
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
D
DataBreaches.Net
博客园 - 【当耐特】
T
Troy Hunt's Blog
V
Visual Studio Blog
V2EX - 技术
V2EX - 技术
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
The GitHub Blog
The GitHub Blog

博客园 - Jackie Yao

美国vps哪个比较好,vps国内访问速度最快! http://t.sohu.com/u/416461865 吃什么水果减肥? GPS导航仪准确度遭质疑-www.daohang2012.com GPS导航仪把车“导”进海-www.daohang2012.com 广州虚拟主机 www.48wo.com sql05 变量小技巧 boxy 你用了吗?? 赞一个 mssql2005 的并发处理. js 繁体转简体 The Digital Lifestyle Developer Blog[推荐] [转]escape,encodeURI,encodeURIComponent函数比较 正则表达式大全. YAHOO工具库提供的方法[转贴] {转}sql日期格式转换 [转]html控件、html服务器控件和web服务器控件的区别 [收藏]ASP.NET的底层的工作机制介绍 [转]asp.net2.0实现treeview无限级菜单树 Build Google IG like Ajax Start Page in 7 days using ASP.NET Ajax and .NET 3.0 ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0
[转]asp.net 2.0 TreeView客户端个性化控制
Jackie Yao · 2007-12-01 · via 博客园 - Jackie Yao

asp.net 2.0 的 TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作:
(1) 节点的全部打开和关闭;
Client Side Expand/Collapse All Nodes For ASP.NET 2.0 TreeView.
(2) 只打开一个节点(关闭其他兄弟节点)。
Just one expanded node in ASP.NET 2.0 TreeView (When a client expand one node all other will collaps)
用记事本打开页面源代码,可以找到一下两个脚本引用:

<script src="/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&amp;t=633300220640000000" type="text/javascript"></script>
<script src="/WebUI/WebResource.axd?d=JuTdJhq3NM8Jq_RhssAkEg2&amp;t=633300220640000000" type="text/javascript"></script>

    将"/WebUI/WebResource.axd?d=RAQeBcDUNuP9iuS8q3tNEw2&amp;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. 节点的全部打开和关闭(Client Side Expand/Collapse All Nodes)

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>LeftMenu_Tree</title>
</head>
<body bgcolor="#DDEDFD">
    
<form id="form1" runat="server">
        
<href="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>', true)">Expand
            All
</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>

2. 只打开一个节点,关闭其他兄弟节点(Just one expanded node, all other will collaps)

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>LeftMenu_Tree</title>
</head>
<body bgcolor="#DDEDFD">
    
<form id="form1" runat="server">
        
<href="javascript:TreeviewExpandCollapseAll('<%=TreeView1.ClientID%>', true)">Expand
            All
</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">
//2. 只打开一个节点,关闭其他兄弟节点(Just one expanded node, all other will collaps)
function TreeView_ToggleNode(data, index, node, lineType, children) 
{
    
var img = node.childNodes[0];
    
var newExpandState;
    
try {
        
//***折叠兄弟节点(Collapse Brothers)-----
        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];
                }

                
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);
}


//折叠兄弟节点(Collapse Brothers)
function CollapseBrothers(data,childContainer)
{
    
var parent = 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"
            }

        }

        
else if(parent.childNodes[i].tagName.toLowerCase() =="table")
        
{
            
var treeLinks = parent.childNodes[i].getElementsByTagName("a");            
            
if(treeLinks.length > 2)
            
{
                
var j=0;
                
if(treeLinks[j].firstChild.tagName)
                
{
                    
if(treeLinks[j].firstChild.tagName.toLowerCase() == "img")
                    
{
                        
var img = treeLinks[j].firstChild;
                        
if(i==0
                            img.src 
= data.images[8];
                        
else if(i==parent.childNodes.length-2
                            img.src 
= data.images[14];
                        
else 
                            img.src 
= data.images[11];
                    }

                }
    
            }

        }
        
    }

}

//-----------------------------------------------------------------------------
</script>