ASP + XML + javascript 實現動態無限級聯動菜單

來源:互聯網
上載者:User
xml|菜單|動態|聯動菜單|xml|菜單|聯動菜單 我做某個項目時,有需求的是做一個動態無限級的聯動菜單。由於本人比較懶於是上網找找有關的代碼,但很多都沒有滿足需求,其中有一編文章是用JavaScript對XML檔案操作來實現無限級聯動菜單的,我們可結合ASP來完成對資料庫值的讀取,然後寫入XML檔案,再用JavaScript讀出來並且控制它的聯動。
這兒的關鍵是把資料庫內的N層資料類讀出來:
我的資料庫表結構是這樣的:
'tbl_Class
列名 資料類型 長度 說明
ClassID int 4 類ID
ModuleID int 4 模組ID
GroupID int 2 標識一個組
ClassName nvarchar 50 類別名稱
ParentID int 2 串連到組(0表示是父類)


'####################################我的ASP代碼如下##########################################
'我把串連資料庫的代碼忽略。


'函數名字:OpenXml(FileName)
'入口參數: filename 需要串連或開啟的xml檔案名稱
'傳回值 :XmlDoc就是一個成功裝載XML文檔的對象了。
' 有錯誤則列印錯誤資訊strError
'------------------------------------------------

function OpenXml(filename)
dim strSourceFile ,XmlDoc,strError
strSourceFile = filename
Set XmlDoc = Server.CreateObject("Microsoft.XMLDOM") '建立XMLDOM執行個體
XmlDoc.async = false
XmlDoc.load(strSourceFile)
OpenXml=XmlDoc.parseerror.errorcode
if XmlDoc.parseerror.errorcode<>0 then
strError="<h2>error"&XmlDoc.parseerror.errorcode&"</h2>"
strError=strError&XmlDoc.parseerror.reason&"<br>"
strError=strError&XmlDoc.parseerror.url&"<br>"
strError=strError&XmlDoc.parseerror.line&"<br>"
strError=strError&XmlDoc.parseerror.filepos&"<br>"
strError=strError&XmlDoc.parseerror.srcText&"<br>"
response.write strError '輸出錯誤
else
set OpenXml=XmlDoc '返回執行個體
end if
end function


'------------------------------------------------
'函數名字:CloseXml()
'參數: XmlDoc XML組件執行個體
'------------------------------------------------
function CloseXml(XmlDoc)
if IsObject(XmlDoc) then
set XmlDoc=nothing
end if
end function


'------------------------------------------------
'函數名字:SelectXmlNode
'參數:XmlDoc XML組件執行個體
'   e 元素的名字
'返回元素執行個體
'------------------------------------------------
function SelectXmlNode(XmlDoc,e)
dim n

set n=XmlDoc.selectSingleNode("//" & e )
set selectXmlNode= n

end function


Dim n,np,MaxGroup,root,xmlDoc,nt,filename,s,ss,TorF
filename=server.mappath("demo.xml")
set xmlDoc=openXML(filename)'開啟XML
RemoveAllNodes xmlDoc,"Root"'把Root和它下面的子項清除,這樣可以多次方便讀寫
set root= xmlDoc.createElement("Root")
xmlDoc.appendChild root'建立一個頂層元素
sql="select Max(GroupID) from tbl_Class " '讀出最大的層次
set rs=cn.execute(sql)
if isnull(rs(0)) then MaxGroup=0 else MaxGroup=rs(0) '如果為null 表示沒有資料
s="":ss=""
set nt=xmldoc.createElement("item")
nt.setAttribute "text", "請選擇"
root.appendChild nt '建立一個元素
for i=1 to MaxGroup '開始迴圈
sql="select * from tbl_Class where GroupID=" & i '由底層向頂層讀取
set rs=cn.execute(sql)
TorF=False '為了每一個層上都建立一個“請選擇”的空取。
do while rs.eof =false '開始讀取下層的資料
Set n = xmlDoc.createElement("item" & rs("ClassID")) '建立一個命名為item + ID號的標記元素
n.setAttribute "text",rs("ClassName")'把它的屬性“text”設定為資料庫表內的

ClassName
n.setAttribute "value",rs("ClassID")'把它的屬性“value”設定為資料庫表內的

ClassID
if rs("ParentID")>0 then '是有上層資料的
set np=selectXmlNode(xmlDoc,"item" & rs("ParentID")) '把它的上層資料元素先讀出儲存在np
if TorF=false then '如果TorF為False值時
set nt=xmldoc.createElement("item") '建立一個元素儲存在nt
nt.setAttribute "text", "請選擇"'把它的text屬性設定為“請選擇”
np.appendChild nt 'np把它加為子項目
end if
TorF=true '設定true
np.appendChild n 'np 把n加為子項目
else
root.appendChild n '如果是第一層資料就把它加入為root下的一個子項目
end if
rs.movenext '下一條指標
loop

ss=ss & "<SELECT id=Select" & i & " width=1 ></SELECT></span>" '每有一層就建立一個

<select>
s=s & ",'Select" & i & "'" '把每個<select>的id 儲存在變數s,它的格式為:id1,id2,id3,id4

next
xmlDoc.save filename '正式儲存Xml檔案
CloseXml xmlDoc '關閉Xml檔案


response.write ss '直接把<select>輸出到文檔
s=mid(s,2)




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.