日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Treeview 只展開一個(gè)節(jié)點(diǎn),其他節(jié)點(diǎn)關(guān)閉

 yhb4000 2012-04-05

asp.net 2.0 的 TreeView 控件功能雖說(shuō)強(qiáng)大,但其客戶端控制很遜色,本文將講解 TreeView 的客戶端實(shí)現(xiàn)原理,并實(shí)現(xiàn)兩個(gè)個(gè)性化操作:
(1) 節(jié)點(diǎn)的全部打開和關(guān)閉;
Client Side Expand/Collapse All Nodes For ASP.NET 2.0 TreeView.
(2) 只打開一個(gè)節(jié)點(diǎn)(關(guān)閉其他兄弟節(jié)點(diǎn))。
Just one expanded node in ASP.NET 2.0 TreeView (When a client expand one node all other will collaps)
用記事本打開頁(yè)面源代碼,可以找到一下兩個(gè)腳本引用:


<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 命名,另一個(gè)同樣操作。分析第二個(gè)腳本文件,可以看到TreeView的很多客戶端函數(shù),其中關(guān)鍵的一個(gè) TreeView_ToggleNode 就是客戶端點(diǎn)擊時(shí)觸發(fā)的事件。
    要想做個(gè)性化的操作,就得從 TreeView_ToggleNode 事件下手。我們無(wú)法更改.net封裝好的腳本,只有“重寫”。所謂的重寫就是在原來(lái)的函數(shù)之后添加一個(gè)同名函數(shù)(因?yàn)閖s對(duì)于同名函數(shù)只調(diào)用最后一個(gè))。

TreeView_ToggleNode 的原函數(shù):


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. 節(jié)點(diǎn)的全部打開和關(guān)閉(Client Side Expand/Collapse All Nodes)
<html xmlns="http://www./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>

2. 只打開一個(gè)節(jié)點(diǎn),關(guān)閉其他兄弟節(jié)點(diǎn)(Just one expanded node, all other will collaps) <html xmlns="http://www./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">
//2. 只打開一個(gè)節(jié)點(diǎn),關(guān)閉其他兄弟節(jié)點(diǎn)(Just one expanded node, all other will collaps)
function TreeView_ToggleNode(data, index, node, lineType, children)
{
    var img = node.childNodes[0];
    var newExpandState;
    try {
        //***折疊兄弟節(jié)點(diǎn)(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);
}

//折疊兄弟節(jié)點(diǎn)(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>

注意這句話:所謂的重寫就是在原來(lái)的函數(shù)之后添加一個(gè)同名函數(shù)(因?yàn)閖s對(duì)于同名函數(shù)只調(diào)用最后一個(gè))。

所以上面的script放在aspx文件的最后引用!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多