<----------------HTML部分--------------------->

<style>
.close{
  visibility:hidden;
  border : 1px solid #008000;
  position:absolute;
   }
.open{
  visibility:visible;
  border : 1px solid #008000;
  position:absolute;
  }
</style>
<script language='JavaScript'>
 
 //—————顯示菜單項 menuId:當前菜單Id—————
 function showMenuItem(menuId) {
  var node = document.getElementById(menuId);
  if(node.hasChildNodes()) {
   node.style.visibility='visible';
  }
 }
 
 
 //—————隱藏菜單項 menuId:當前菜單Id—————
 function hideMenuItem(menuId) {
   document.getElementById(menuId).style.visibility='hidden';
 }
 
 //—————隱藏菜單項事件方法—————
 function hideMenuItemEvent() {
  event.srcElement.parentElement.style.visibility='hidden';
 }
 
 //—————初始化下拉框—————
 function inintSelectMenu() {
  //查找一級節點
  var resultNodes = findXmlnodes("http://mainClass",resultNodes);
  var mainClassNode = document.getElementById("mainClass");

  //給一級節點添加子子節點
   addChildrenNodes(mainClassNode,resultNodes);
  
  //緩存一級菜單選擇的默認值
  var mainClassTxtNode = document.getElementById("mainClassTxt");
  var mainClassBtnNode = document.getElementById("mainClassBtn");
  mainClassTxtNode.setAttribute("tempId",1);
  //設置下拉菜單絕對位置
  setDivAbsulotePosition(mainClassNode,mainClassTxtNode);
  //設置Btn的絕對位置
  //mainClassBtnNode.style.position = "absolute";
  //setBtnAbsulotePosition(mainClassBtnNode,mainClassTxtNode);
 
  //一級菜單
  mainClassNode.attachEvent(onblur,hideMenuItem);
  //二級菜單
  var subClassNode = document.getElementById("subClass");
  var subClassBtnNode = document.getElementById("subClassBtn");
  var subClassTxtNode = document.getElementById("subClassTxt");
  setDivAbsulotePosition(subClassNode,subClassTxtNode);
  //設置Btn的絕對位置
  //subClassBtnNode.style.position = "absolute";
  //setBtnAbsulotePosition(subClassBtnNode,subClassTxtNode);
  
  //三級菜單
  var itemClassNode = document.getElementById("itemClass");
  var itemClassBtnNode = document.getElementById("itemClassBtn");
  var itemClassTxtNode = document.getElementById("itemClassTxt");
  setDivAbsulotePosition(itemClassNode,itemClassTxtNode);
  //設置Btn的絕對位置
  //itemClassBtnNode.style.position = "absolute";
  //setBtnAbsulotePosition(itemClassBtnNode,itemClassTxtNode);
 }

 
 //—————更新下拉菜單—————
 function updateSelectMenu() {
  
  //被選擇節點Id
  var nodeId = event.srcElement.getAttribute("id");
  //被選擇節點文本子節點名
  var nodeName = event.srcElement.title != null > 5 ? event.srcElement.title : event.srcElement.childNodes.item(0).nodeValue;
  //被選擇節點父節點
  var parentNode = event.srcElement.parentElement;
  //被選擇節點父節點Id
  var parentNodeId = parentNode.getAttribute("id");
  //給文本框賦被選擇值
  document.getElementById(parentNodeId + "Txt").setAttribute("value",nodeName);
  
  //如果被選擇的是一級菜單,更新二、三級菜單
  if(parentNodeId == "mainClass") {
   //緩存一級菜單選擇
   document.getElementById(parentNodeId + "Txt").setAttribute("tempId",nodeId);
   //清空二級菜單列表
   document.getElementById("subClassTxt").setAttribute("value","請選擇");
   //清空三級菜單列表
   document.getElementById("itemClassTxt").setAttribute("value","請選擇");
   //移除二級節點
   removeChildNodes("subClass");
   //移除三級節點
   removeChildNodes("itemClass");
   //查找二級節點
   var resultSubNodes = findXmlnodes("http://mainClass[@id=" + nodeId + "]/subClass",resultSubNodes);
   //alert(resultSubNodes.length);
   var subNode = document.getElementById("subClass");
   //給二級節點添加子子節點
    addChildrenNodes(subNode,resultSubNodes);
   
   
  }
  
  //如果更新的是二級菜單,更新三級菜單
  if(parentNodeId == "subClass") {
   //獲得一級菜單緩存值
   var mainClassId = document.getElementById("mainClassTxt").getAttribute("tempId");
   //清空三級菜單列表
   document.getElementById("itemClassTxt").setAttribute("value","請選擇");
   removeChildNodes("itemClass");
   //移除三級節點
   removeChildNodes("itemClass");
   //查找三級節點
   var resultItemNodes = findXmlnodes("http://mainClass[@id=" + mainClassId + "]/subClass[@id=" + nodeId + "]/item",resultItemNodes);
   //alert(resultItemNodes.length);
   var itemNode = document.getElementById("itemClass");
   //給三級節點添加子子節點
    addChildrenNodes(itemNode,resultItemNodes);
  }
  
 }
 
 

 //—————添加子節點列表 parentNode: 父節點, childrenNodes: 子節點列表—————
 function addChildrenNodes(parentNode,childrenNodes) {
  for(i = 0; i < childrenNodes.length; i++) {
   //var tempNode = childrenNodes.item(i);
   //prompt("tempNode",tempNode.xml);
   createNode("div",childrenNodes.item(i).getAttribute("id"),childrenNodes.item(i).getAttribute("name"),parentNode);
   //alert(childrenNodes.item(i).getAttribute("name") + "  " + childrenNodes.item(i).getAttribute("id"));
  }
 }
 
 
 //—————創建子節點,并添加到父節點 type: 節點類型, id:節點Id, txt:文本節點文本值,parentNode: 父節點 —————
 function createNode(type,id,txt,parentNode) {
  //文本節點
  var txtNode = null;
  //需創建的子節點
  var subNode = null;
  
  //判斷節點類型是否為空,為空直接返回
  if(type == null) {
   return;
  }
  //創建節點
     subNode = document.createElement(type);
  
  //判斷是否包含文本是否為空,不為空則創建并添加文本子節點
  if(txt != null) {
   
   //設置文本節點彈出文字
   if(checkSelectMenuItemLength(txt)){
    subNode.title = txt;
    var txtTemp = txt.substring(0, 5) + "..." ;  
    //創建文本節點
    txtNode = document.createTextNode(txtTemp);
   }else {
    txtNode = document.createTextNode(txt);
   }
   
   //添加文本節點
   subNode.appendChild(txtNode);
  }
  
  //判斷id是否為空,不為空則添加id屬性
  if(id != null) {
   subNode.setAttribute('id',id);
  }
  subNode.attachEvent("onclick",hideMenuItemEvent);
  subNode.attachEvent("onclick",updateSelectMenu);
  subNode.attachEvent("onmouseover",romanceItem);
  subNode.attachEvent("onmouseout",unRomanceItem);
  
  //添加新建子節點到父節點
  parentNode.appendChild(subNode);
  
 }
 
 //—————查找數據節點 condition: XPath查詢條件, resultNodes:返回節點集合—————
 function findXmlnodes(condition,resultNodes) {
  //判斷查詢條件是否為空
  if(condition == null) {
   return;
  }
  // 初始化ActiveXObject DOMDocment對象
  var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
  // 設置異步方式
  xmlDoc.async=false;
  // 加載xml
  xmlDoc.load(document.getElementById("mainClassTxt").getAttribute("xmlSrc"));
  //  指定查詢語言
  xmlDoc.setProperty("SelectionLanguage","XPath");
  //  查詢并獲得節點
  resultNodes = xmlDoc.documentElement.selectNodes(condition);
  //alert(resultNodes.length); 
  return resultNodes;
 }
 
 
 //—————移除所有子節點 pareantNodeName: 父節點名—————
 function removeChildNodes(pareantNodeName) {
  var subNodes = document.getElementById(pareantNodeName).childNodes;
  var subNodeslength = subNodes.length;
  
  for (i = 0; i < subNodeslength; i++) {
    subNodes.item(0).removeNode(true);
   }
 }
 

 //—————渲染條目背景色—————
 function romanceItem() {
  event.srcElement.style.backgroundColor="cornflowerblue";
 }

 //—————反渲染條目背景色—————
 function unRomanceItem() {
  event.srcElement.style.backgroundColor="#ffffff";
 }

 //—————檢測條目長度—————
 function checkSelectMenuItemLength(txt) {
  if(txt.length > 5)
   return true;
  else
   return false;
 }
 
 //—————設置層的絕對坐標 setNode:須設置坐標的節點 consultNode:參照節點 —————
 function setDivAbsulotePosition(setNode,consultNode) {
  setNode.style.top = getPosition(consultNode).y + consultNode.offsetHeight;
  setNode.style.left = getPosition(consultNode).x;
  setNode.style.width = consultNode.offsetWidth;
 }
 
 function setBtnAbsulotePosition(setNode,consultNode) {
  setNode.style.top = getPosition(consultNode).y;
  setNode.style.left = getPosition(consultNode).x + consultNode.offsetWidth;
 
 }
 
 //—————獲取參照節點的絕對位置 node: 參照節點—————
 function getPosition(node){ 
  var left = 0; 
  var top  = 0; 
  while (node.offsetParent){ 
   left += node.offsetLeft; 
   top += node.offsetTop; 
  node = node.offsetParent; 
  } 
  left += node.offsetLeft; 
  top += node.offsetTop;
 return {x:left, y:top}; 

 
</script>

<html>
 <body onload="inintSelectMenu();">
  <form>
   <br><br><br><br><br><br><br><br><br><br><br><br>
   <center>
   <table>
    <tr>
    <td>
    &nbsp;&nbsp;
    主分類
    <input type='text' id='mainClassTxt' readonly='true' value="請選擇" xmlSrc="selectMenuData.xml">
     <input id='mainClassBtn' type='button' value='>>'  onclick="showMenuItem('mainClass');hideMenuItem('itemClass');hideMenuItem('subClass');" />
    </input>
     <div id='mainClass' class="close" >
     </div>
    </td>
       <td>
       &nbsp;&nbsp;
    子分類
    <input  type='text' id='subClassTxt' readonly='true' value="請選擇" >
     <input id='subClassBtn' type='button' value='>>' onclick="showMenuItem('subClass');hideMenuItem('mainClass');hideMenuItem('itemClass');"/>
    </input>
     <div id='subClass' class="close" >
     </div>
    </td>
       <td>
       &nbsp;&nbsp;
    條  目
    <input type='text' id='itemClassTxt' readonly='true' value="請選擇"  >
     <input id='itemClassBtn' type='button' value='>>' onclick="showMenuItem('itemClass');hideMenuItem('mainClass');hideMenuItem('subClass');" />
    </input>
     <div id='itemClass' class="close" >
     </div>
    </td>
    </tr>
    </table>
   </center>
  </form>
 </body>
</html>
<----------------HTML部分--------------------->



<----------------XML部分--------------------->
<classes>
 <mainClass id='1' name='book'>
  <subClass id='1' name='computer'>
   <item id='1' name='think in java'></item>
   <item id='2' name='C#'></item>
   <item id='3' name='javascript'></item>
  </subClass>
  <subClass id='2' name='literature'>
   <item id='1' name='literaturea'></item>
   <item id='2' name='literatureb'></item>
   <item id='3' name='literaturec'></item>
  </subClass>
  <subClass id='3' name='test'>
   <item id='1' name='testaaaa'></item>
   <item id='2' name='testbbbb'></item>
   <item id='3' name='testcccc'></item>
  </subClass>
  <subClass id='4' name='ssssss'>
   <item id='1' name='sssssssaaa'></item>
   <item id='2' name='sssssssbbb'></item>
   <item id='3' name='sssssssccc'></item>
  </subClass>
 </mainClass>
 <mainClass id='2' name='book2'>
  <subClass id='1' name='computer2'>
   <item id='1' name='think in java2'></item>
   <item id='2' name='C#2'></item>
   <item id='3' name='javascript2'></item>
  </subClass>
  <subClass id='2' name='literature2'>
   <item id='1' name='literaturea21'></item>
   <item id='2' name='literatureb22'></item>
   <item id='3' name='literaturec23'></item>
  </subClass>
  <subClass id='3' name='test2'>
   <item id='1' name='testaaaa21'></item>
   <item id='2' name='testbbbb22'></item>
   <item id='3' name='testcccc23'></item>
  </subClass>
  <subClass id='4' name='ssssss2'>
   <item id='1' name='sssssssaaa21'></item>
   <item id='2' name='sssssssbbb22'></item>
   <item id='3' name='sssssssccc23'></item>
  </subClass>
 </mainClass>
 <mainClass id='3' name='book3'>
  <subClass id='1' name='computer3'>
   <item id='1' name='think in java3'></item>
   <item id='2' name='C#3'></item>
   <item id='3' name='javascript3'></item>
  </subClass>
  <subClass id='2' name='literature3'>
   <item id='1' name='literaturea31'></item>
   <item id='2' name='literatureb32'></item>
   <item id='3' name='literaturec33'></item>
  </subClass>
  <subClass id='3' name='test3'>
   <item id='1' name='testaaaa31'></item>
   <item id='2' name='testbbbb32'></item>
   <item id='3' name='testcccc33'></item>
  </subClass>
  <subClass id='4' name='ssssss3'>
   <item id='1' name='sssssssaaa31'></item>
   <item id='2' name='sssssssbbb32'></item>
   <item id='3' name='sssssssccc33'></item>
  </subClass>
 </mainClass>
 <mainClass id='4' name='book4'>
  <subClass id='1' name='computer4'>
   <item id='1' name='think in java4'></item>
   <item id='2' name='C#4'></item>
   <item id='3' name='javascript4'></item>
  </subClass>
  <subClass id='2' name='literature4'>
   <item id='1' name='literaturea41'></item>
   <item id='2' name='literatureb42'></item>
   <item id='3' name='literaturec43'></item>
  </subClass>
  <subClass id='3' name='test4'>
   <item id='1' name='testaaaa41'></item>
   <item id='2' name='testbbbb42'></item>
   <item id='3' name='testcccc43'></item>
  </subClass>
  <subClass id='4' name='ssssss4'>
   <item id='1' name='sssssssaaa41'></item>
   <item id='2' name='sssssssbbb42'></item>
   <item id='3' name='sssssssccc43'></item>
  </subClass>
 </mainClass>
</classes>
<----------------XML部分--------------------->