九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
js實(shí)現(xiàn)多級(jí)聯(lián)動(dòng)下拉框

花了半天時(shí)間實(shí)現(xiàn)一個(gè)多級(jí)聯(lián)動(dòng)下拉框,目的是對(duì)某一植物進(jìn)行“門綱目科屬”的歸類。使用的技術(shù)是javascript+xml,之所以不用數(shù)據(jù)庫,一來這方面的數(shù)據(jù)雖然量大但都是固定不變的,二來不希望加重服務(wù)器的負(fù)擔(dān),第三是因?yàn)檫@種多級(jí)從屬關(guān)系的數(shù)據(jù)不太適合放在數(shù)據(jù)庫里。

這是大概的思路:
1、讀取xml文件
2、當(dāng)一個(gè)下拉框選中某選項(xiàng)時(shí),根據(jù)該選項(xiàng),當(dāng)前節(jié)點(diǎn)指向下一層,進(jìn)入下一層下拉框的設(shè)置
3、取消當(dāng)前下拉框的禁用,禁用下一層的下拉框
4、清空當(dāng)前下拉框的選項(xiàng)
5、根據(jù)當(dāng)前節(jié)點(diǎn)讀取xml的數(shù)據(jù),設(shè)置下拉框選項(xiàng)
6、返回步驟2

代碼:
JavaScript

Javascript代碼
  1. //載入xml文件   
  2. var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");   
  3. xmlDoc.async = false;   
  4. xmlDoc.load("classify.xml");   
  5.   
  6. var currentNode;//當(dāng)前所在節(jié)點(diǎn)   
  7.   
  8. //讀取xml文件數(shù)據(jù)并設(shè)置門、綱、目、科、屬的下拉框   
  9.   
  10. //設(shè)置“門”的下拉框   
  11. function setPhylum(){   
  12.     currentNode=xmlDoc.documentElement;   
  13.     var phylums = currentNode.childNodes;   
  14.     for(var i=0;i<phylums.length;i++){   
  15.         //從門到屬,都有name屬性標(biāo)簽,并且所有下拉框選項(xiàng)索引都是從1開始   
  16.         var phylumName=phylums(i).selectNodes("name")(0).text;   
  17.         document.forms[0].phylum.options[i+1]=new Option(phylumName,phylumName);   
  18.     }   
  19. }   
  20.   
  21. //設(shè)置“綱”的下拉框   
  22. function setClazz(selectedIndex){   
  23.     //取消下拉框的禁用   
  24.     //后面的下拉框禁用,這是因應(yīng)各下拉框的無序選擇可能產(chǎn)生的錯(cuò)誤   
  25.     //比如選了“科”又回頭重新選“目”,或更改同一個(gè)下拉框選項(xiàng))   
  26.     document.forms[0].clazz.disabled=null;   
  27.     document.forms[0].order.disabled="disabled";   
  28.     document.forms[0].family.disabled="disabled";   
  29.     document.forms[0].genus.disabled="disabled";   
  30.        
  31.     //將選中的門節(jié)點(diǎn)作為當(dāng)前節(jié)點(diǎn),注意這里需要將索引回減1   
  32.     //因?yàn)殚T的父節(jié)點(diǎn)沒有name屬性標(biāo)簽,而下拉框的索引又是從1開始   
  33.     //currentNode的賦值應(yīng)使用絕對(duì)定位,也是因應(yīng)各下拉框的無序選擇   
  34.     //currentNode=currentNode.childNodes(selectedIndex-1);   
  35.     currentNode=xmlDoc.documentElement.childNodes(selectedIndex-1);   
  36.     var clazzes=currentNode.childNodes;   
  37.        
  38.     clearOption(document.forms[0].clazz);   
  39.     //因?yàn)殚T節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)為name屬性標(biāo)簽,故循環(huán)時(shí)索引從1開始   
  40.     //相應(yīng)的下拉框的索引就與綱節(jié)點(diǎn)的索引同步(不需要options[i+1]),目、科、屬也是一樣   
  41.     for(var i=1;i<clazzes.length;i++){   
  42.         var clazzName=clazzes(i).selectNodes("name")(0).text;   
  43.         document.forms[0].clazz.options[i]=new Option(clazzName,clazzName);   
  44.     }   
  45. }   
  46.   
  47. //設(shè)置“目”的下拉框   
  48. function setOrder(selectedIndex){   
  49.     //取消下拉框的禁用   
  50.     //后面的下拉框禁用,這是因應(yīng)各下拉框的無序選擇可能產(chǎn)生的錯(cuò)誤(比如選了“科”又回頭重新選“目”)   
  51.     document.forms[0].order.disabled=null;   
  52.     document.forms[0].family.disabled="disabled";   
  53.     document.forms[0].genus.disabled="disabled";   
  54.        
  55.     //currentNode的賦值應(yīng)使用絕對(duì)定位   
  56.     var phylumSI=document.forms[0].phylum.selectedIndex;    //phylum selected index   
  57.     currentNode=xmlDoc.documentElement   
  58.         .childNodes(phylumSI-1)   
  59.         .childNodes(selectedIndex);   
  60.     var orders=currentNode.childNodes;   
  61.     clearOption(document.forms[0].order);   
  62.     for(var i=1;i<orders.length;i++){   
  63.         var orderName=orders(i).selectNodes("name")(0).text;   
  64.         document.forms[0].order.options[i]=new Option(orderName,orderName);   
  65.     }   
  66. }   
  67.   
  68. //設(shè)置“科”的下拉框   
  69. function setFamily(selectedIndex){   
  70.     document.forms[0].family.disabled=null;//取消下拉框的禁用   
  71.     document.forms[0].genus.disabled="disabled";//后面的下拉框禁用   
  72.        
  73.     //currentNode的賦值應(yīng)使用絕對(duì)定位   
  74.     var phylumSI=document.forms[0].phylum.selectedIndex;//phylum selected index   
  75.     var clazzSI=document.forms[0].clazz.selectedIndex;  //clazz selected index   
  76.     currentNode=xmlDoc.documentElement   
  77.         .childNodes(phylumSI-1)   
  78.         .childNodes(clazzSI)   
  79.         .childNodes(selectedIndex);   
  80.     var families=currentNode.childNodes;   
  81.     clearOption(document.forms[0].family);   
  82.     for(var i=1;i<families.length;i++){   
  83.         var familyName=families(i).selectNodes("name")(0).text;   
  84.         document.forms[0].family.options[i]=new Option(familyName,familyName);   
  85.     }   
  86. }   
  87.   
  88. //設(shè)置“屬”的下拉框   
  89. function setGenus(selectedIndex){   
  90.     document.forms[0].genus.disabled=null;//取消下拉框的禁用   
  91.        
  92.     //currentNode的賦值應(yīng)使用絕對(duì)定位   
  93.     var phylumSI=document.forms[0].phylum.selectedIndex;//phylum selected index   
  94.     var clazzSI=document.forms[0].clazz.selectedIndex;  //clazz selected index   
  95.     var orderSI=document.forms[0].order.selectedIndex;  //order selected index   
  96.     currentNode=xmlDoc.documentElement   
  97.         .childNodes(phylumSI-1)   
  98.         .childNodes(clazzSI)   
  99.         .childNodes(orderSI)   
  100.         .childNodes(selectedIndex);   
  101.     var genuses=currentNode.childNodes;   
  102.     clearOption(document.forms[0].genus);   
  103.     for(var i=1;i<genuses.length;i++){   
  104.         //屬為葉節(jié)點(diǎn)   
  105.         var genusName=genuses(i).text;   
  106.         document.forms[0].genus.options[i]=new Option(genusName,genusName);   
  107.     }   
  108. }   
  109.   
  110. //清空下拉框選項(xiàng)   
  111. function clearOption(selectElement){   
  112.     for(var i=1;i<selectElement.options.length;i++){   
  113.         selectElement.options[i]=null;   
  114.     }   
  115. }  



html

Html代碼
  1. <form id="plantForm" action="plant" method="post">  
  2.         <select id="phylum" name="plantForm.phylum"  
  3.             onchange="setClazz(this.selectedIndex)">  
  4.             <option selected="selected">———門———</option>  
  5.         </select>  
  6.            
  7.         <select id="clazz" name="plantForm.clazz" disabled="disabled"    
  8.             onchange="setOrder(this.selectedIndex)">  
  9.             <option selected="selected">———綱———</option>  
  10.         </select>  
  11.            
  12.         <select id="order" name="plantForm.order" disabled="disabled"    
  13.             onchange="setFamily(this.selectedIndex)">  
  14.             <option selected="selected">———目———</option>  
  15.         </select>  
  16.            
  17.         <select id="family" name="plantForm.family" disabled="disabled"    
  18.             onchange="setGenus(this.selectedIndex)">  
  19.             <option selected="selected">———科———</option>  
  20.         </select>  
  21.            
  22.         <select id="genus" name="plantForm.genus" disabled="disabled">  
  23.             <option selected="selected">———屬———</option>  
  24.         </select>  
  25. </form>  
  26. <script type="text/javascript">  
  27.         setPhylum();//設(shè)置第一個(gè)下拉框   
  28. </script>  



最后是xml文件的內(nèi)容

Xml代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <plant>  
  3.     <phylum>  
  4.         <name>被子植物門</name>  
  5.         <clazz>  
  6.             <name>雙子葉植物綱</name>  
  7.             <order>  
  8.                 <name>菊目</name>  
  9.                 <family>  
  10.                     <name>菊科</name>  
  11.                     <genus>菊屬</genus>  
  12.                 </family>  
  13.                 <family>  
  14.                     <name>桔梗科</name>  
  15.                     <genus>同鐘花屬</genus>  
  16.                     <genus>刺萼參屬</genus>  
  17.                 </family>  
  18.             </order>  
  19.             <order>  
  20.                 <name>胡椒目</name>  
  21.                 <family>  
  22.                     <name>胡椒科</name>  
  23.                     <genus>胡椒屬</genus>  
  24.                     <genus>草胡椒屬</genus>  
  25.                     <genus>齊頭絨屬</genus>  
  26.                 </family>  
  27.             </order>  
  28.         </clazz>  
  29.     </phylum>  
  30.     <phylum>  
  31.         <name>蕨類植物門</name>  
  32.         <clazz>  
  33.             <name>石松綱</name>  
  34.             <order>  
  35.                 <name>石松目</name>  
  36.                 <family>  
  37.                     <name>石松科</name>  
  38.                     <genus>石松屬</genus>  
  39.                 </family>  
  40.             </order>  
  41.         </clazz>  
  42.     </phylum>  
  43. </plant>  

 

可以實(shí)現(xiàn)上下級(jí)下拉框的聯(lián)動(dòng),支持無序選擇,若向上重新選擇,下下層下拉框?qū)⒆詣?dòng)被禁用,下層下拉框選項(xiàng)也會(huì)相應(yīng)改變。


有一點(diǎn)不足是,因?yàn)閿?shù)據(jù)量實(shí)在太大,這樣5個(gè)下拉框仍然可能出現(xiàn)某下拉框有幾百甚至幾千個(gè)選項(xiàng),此時(shí)就失去了下拉框的意義,因此正在考慮是否應(yīng)該做成輸入框的形式,或者像搜索引擎那樣帶有輸入提示功能,研究中,歡迎拍磚。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
IE8/IE7/IE6下Select列表中disabled的使用
asp.net音樂連播全代碼
讀取xml到下拉列表
將form表單中的數(shù)據(jù)組裝成json對(duì)象
R語言實(shí)現(xiàn)LEfse分析從數(shù)據(jù)整理到樹形圖繪制
javascript控制復(fù)選框只能選擇兩項(xiàng)后,別的都選不上。
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服