無限級CSS樹形菜單

來源:互聯網
上載者:User

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
<html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<style type="text/css">

body
{
margin: 0px;
padding: 20px;

font: 12px tahoma,宋體,sans-serif;
}

/* 無限子級菜單 開始 */
*
{
margin: 0px;
padding: 0px;
}

/* 外框 */
#TreeMenu
{
Width: 160px;
word-wrap: break-word;
background-color: #FFFFCC;
}

/* 每一個ul */
#TreeMenu ul
{
margin: 0px 0px 0px 10px;
list-style: none;
}

/* 第一個ul */
ul#TreeTop
{
margin: 0px;
}

/* 每一個li */
#TreeMenu ul li
{
width: 100%;
}

/* 每一個li裡面的a 開始 */
#TreeMenu ul li a
{
padding: 0px 0px 0px 30px;

font-size: 12px;
font-weight: normal;
text-decoration: none;
}

#TreeMenu ul li a:link,
#TreeMenu ul li a:visited
{
color: #009933;
}

#TreeMenu ul li a:hover
{
color: #FF0000;
}

#TreeMenu ul li a:active
{
color: #009933;
}
/* 每一個li裡面的a 結束 */

/* 關閉的節點 開始 */
li.TreeClosed
{
background: url(<a href="http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/closed.gif" target="_blank">http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/closed.gif</a>) no-repeat 0px 0px;
}

li.TreeClosed ul
{
display: none;
}
/* 關閉的節點 結束 */

/* 開啟的節點 */
li.TreeOpened
{
background: url(<a href="http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/opened.gif" target="_blank">http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/opened.gif</a>) no-repeat 0px 0px;
}

/* 最終節點 開始 */
li.TreeChild
{
background:url(<a href="http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/child.gif" target="_blank">http://www.cnlei.org/mycode/CNLTreeMenu/Ver1.0.2/css/skin3/child.gif</a>) no-repeat 0px 0px;
}

/* 調整最終節點的位置 */
#TreeMenu ul li.TreeChild
{
margin: 0px 0px 0px 4px;
}

/* 調整最終節點中a的位置 */
#TreeMenu ul li.TreeChild a
{
padding: 0px 0px 0px 15px;
}
/* 最終節點 結束 */

/* 全部展開摺疊 開始 */
#SwitchAllNodes
{
padding: 10px 0px 10px 15px;
}

a#AllOpenID,
a#AllCloseID
{
color: #009933;
text-decoration: none;
}

a#AllCloseID
{
display: none;
}

a#AllOpenID:hover,
a#AllCloseID:hover
{
color: #FF0000;
}
/* 全部展開摺疊 結束 */

/* 無限子級菜單 結束 */

</style>

<title>無標題文檔</title>
</head>

<body>

<div id="TreeMenu">
<h4>Tree Menu</h4>
<div id="SwitchAllNodes">
<a id="AllOpenID" href="#" onclick="javascript:funSwitchAllNodes('Open','AllOpenID','AllCloseID');">全部展開</a>
<a id="AllCloseID" href="#" onclick="javascript:funSwitchAllNodes('Close','AllOpenID','AllCloseID');">全部摺疊</a>
</div>

<ul id="TreeTop">
<!-- 第1級 開始 -->
<li class="TreeOpened"><a href="#">IECN.Net</a>
<ul>
<!-- 第2級 開始 -->
<li><a href="#">技術區</a>
<ul>
<!-- 第3級 開始 -->
<li><a href="#">網頁技術</a>
<ul>
<!-- 第4級 內容 -->
<li class="TreeChild"><a href="#">JavaScript</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">HTML/XHTML/CSS</a></li>
<li class="TreeChild"><a href="#">Ajax</a></li>
<li class="TreeChild"><a href="#">網頁製作工具</a></li>
<li class="TreeChild"><a href="#">設計/圖形</a></li>
<li class="TreeChild"><a href="#">Flash/多媒體</a></li>
<li class="TreeChild"><a href="#">VML/Web3D</a></li>
</ul>
</li>
<!-- 第3級 結束 -->

<!-- 第3級 開始 -->
<li><a href="#">Web編程</a>
<ul>
<!-- 第4級 內容 -->
<li class="TreeChild"><a href="#">Java</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">.Net</a></li>
<li class="TreeChild"><a href="#">ASP/VBScript</a></li>
<li class="TreeChild"><a href="#">PHP</a></li>
<li class="TreeChild"><a href="#">Perl/Python</a></li>
<li class="TreeChild"><a href="#">Web綜合/開源</a></li>
</ul>
</li>
<!-- 第3級 結束 -->

<!-- 第3級 開始 -->
<li><a href="#">資料庫</a>
<ul>
<!-- 第4級 內容 -->
<li class="TreeChild"><a href="#">Access/SQLServer</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">MySQL/PostgreSQL</a></li>
<li class="TreeChild"><a href="#">Oracle/DB2/Sybase</a></li>
</ul>
</li>
<!-- 第3級 結束 -->

<!-- 第3級 開始 -->
<li><a href="#">伺服器</a>
<ul>
<!-- 第4級 內容 -->
<li class="TreeChild"><a href="#">Windows/IIS</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">Unix/Linux/Apache</a></li>
<li class="TreeChild"><a href="#">應用伺服器</a></li>
</ul>
</li>
<!-- 第3級 結束 -->
</ul>
</li>
<!-- 第2級 結束 -->

<!-- 第2級 開始 -->
<li><a href="#">二級目錄</a>
<ul>
<!-- 第3級 開始 -->
<li><a href="#">三級目錄</a>
<ul>
<!-- 第4級 開始 -->
<li><a href="#">四級目錄</a>
<ul>
<!-- 第5級 開始 -->
<li><a href="#">五級目錄</a>
<ul>
<!-- 中間級 開始 -->
<li><a href="#">......</a>
<ul>
<!-- 第n級 開始 -->
<li><a href="#">第n級目錄</a>
<ul>
<!-- 第n+1級 內容 -->
<li class="TreeChild"><a href="#">最終節點1</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">最終節點2</a></li>
<li class="TreeChild"><a href="#">最終節點3</a></li>
</ul>
</li>
<!-- 第n級 結束 -->
</ul>
</li>
<!-- 中間級 結束 -->
</ul>
</li>
<!-- 第5級 結束 -->
</ul>
</li>
<!-- 第4級 結束 -->
</ul>
</li>
<!-- 第3級 結束 -->
</ul>
</li>
<!-- 第2級 結束 -->

<!-- 第2級 開始 -->
<li><a href="#">第二個二級目錄</a>
<ul>
<!-- 第3級 開始 -->
<li><a href="#">第二個三級目錄</a>
<ul>
<!-- 第4級 開始 -->
<li><a href="#">第二個四級目錄</a>
<ul>
<!-- 第5級 開始 -->
<li><a href="#">第二個五級目錄</a>
<ul>
<!-- 中間級 開始 -->
<li><a href="#">......</a>
<ul>
<!-- 第n級 開始 -->
<li><a href="#">第二個第n級目錄</a>
<ul>
<!-- 第n+1級 內容 -->
<li class="TreeChild"><a href="#">最終節點1</a></li><!--TreeChild Node-->
<li class="TreeChild"><a href="#">最終節點2</a></li>
<li class="TreeChild"><a href="#">最終節點3</a></li>
</ul>
</li>
<!-- 第n級 結束 -->
</ul>
</li>
<!-- 中間級 結束 -->
</ul>
</li>
<!-- 第5級 結束 -->
</ul>
</li>
<!-- 第4級 結束 -->
</ul>
</li>
<!-- 第3級 結束 -->
</ul>
</li>
<!-- 第2級 結束 -->

</ul>
</li>
<!-- 第1級 結束 -->
</ul>

</div>

<script type="text/javascript">
<!--
/*
結構是<ul><li><div class="TreeTMP"><a>內容</a></div></li></ul>
<TreeTMP>被點擊後,改變這個<TreeTMP>父級的<li>的class名稱
*/
function funSwitch(praOBJ)
{
if (praOBJ.parentNode.className == "TreeOpened")
praOBJ.parentNode.className = "TreeClosed";
else
praOBJ.parentNode.className = "TreeOpened";
}

function initTreeMenu()
{
/* 得到ID名稱為 TreeMenu 中全部的<li>,代入對象數組 */
this.AllNodesOBJ = document.getElementById("TreeMenu").getElementsByTagName("li");

for (i = 0; i < this.AllNodesOBJ.length; i++ )
{
/* 把沒有定義 class 名稱的<li>定義為 TreeClosed */
if (this.AllNodesOBJ[i].className == "")
this.AllNodesOBJ[i].className = "TreeClosed";

/* 在 class 名稱不是 TreeChild 的<li>的<a>的外面,再增加一個臨時 div ,點擊這個 div 則執行 funSwitch 函數 */
if (this.AllNodesOBJ[i].className != "TreeChild")
{
var myHTMLIna = this.AllNodesOBJ[i].getElementsByTagName("a")[0].outerHTML.toString();
this.AllNodesOBJ[i].getElementsByTagName("a")[0].outerHTML = "<div class='TreeTMP' onclick='javascript:funSwitch(this);'>" + myHTMLIna + "</div>";
}
}
}

/*
展開或關閉全部節點
全部展開用法:funSwitchAllNodes("Open","AllOpenID","AllCloseID");
全部關閉用法:funSwitchAllNodes("Close","AllOpenID","AllCloseID");
*/
function funSwitchAllNodes(praSwitch,praOpenID,praCloseID)
{
var myClassName;
if (praSwitch == "Open")
{
myClassName = "TreeOpened";
document.getElementById(praOpenID).style.display="none";
document.getElementById(praCloseID).style.display="inline";
}

if (praSwitch == "Close")
{
myClassName = "TreeClosed";
document.getElementById(praOpenID).style.display="inline";
document.getElementById(praCloseID).style.display="none";
}

/* 得到ID名稱為 TreeMenu 中全部的<li>,代入對象數組 */
this.AllNodesOBJ = document.getElementById("TreeMenu").getElementsByTagName("li");

for (i = 0; i < this.AllNodesOBJ.length; i++ )
{
if (this.AllNodesOBJ[i].className != "TreeChild")
this.AllNodesOBJ[i].className = myClassName;
}
}

initTreeMenu();            

-->
</script>

</body>
</html>

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.