js實(shí)現(xiàn)省級(jí)聯(lián)動(dòng)(數(shù)據(jù)結(jié)構(gòu)優(yōu)化)
本文實(shí)例為大家分享了js實(shí)現(xiàn)省級(jí)聯(lián)動(dòng)的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <style> div{ width: 200px; float: left; margin-left: 20px; } select{ width: 200px; } </style></head><body> <div> <select name='province'> <option value=''>---請(qǐng)選擇省---</option> </select> </div> <div> <select name='city'> <option value=''>---請(qǐng)選擇城市---</option> </select> </div></body><script> //準(zhǔn)備數(shù)據(jù)--- let data = [ { p_name:'浙江省', p_id:1, citys:[ { c_name:'杭州市', c_id:100 }, { c_name:'溫州市', c_id:101 }, { c_name:'寧波市', c_id:102 }, { c_name:'嘉興市', c_id:103 }, { c_name:'湖州市', c_id:104 }, { c_name:'紹興市', c_id:105 }, { c_name:'金華市', c_id:106 }, ] }, { p_name:'湖北省', p_id:2, citys:[ { c_name:'武漢市', c_id:200 }, { c_name:'黃石市', c_id:201 }, { c_name:'十堰市', c_id:202 }, { c_name:'襄陽(yáng)市', c_id:204 }, { c_name:'荊州市', c_id:205 }, { c_name:'黃岡市', c_id:206 }, ] }, { p_name:'山東省', p_id:3, citys:[ { c_name:'濟(jì)南市', c_id:300 }, { c_name:'青島市', c_id:301 }, { c_name:'淄博市', c_id:302 }, { c_name:'棗莊市', c_id:303 }, { c_name:'煙臺(tái)市', c_id:304 }, { c_name:'日照市', c_id:305 }, ] } ]; // 加載所有的省份信息到一級(jí)的下拉列表中 let province = document.getElementById('province'); data.forEach((e,i)=>{ province.innerHTML += ’<option value='’+e.p_id+’'>’+e.p_name+’</option>’ }); //給一級(jí)下拉列表綁定onchange事件 province.onchange = function(){ // this.value;//選擇的省的id // alert(this.value); //根據(jù)省的id去找該省對(duì)應(yīng)的市的信息 data.forEach((e,i)=>{ if(e.p_id == this.value){ let citys = e.citys; //將所有的市的信息填充到二級(jí)的下拉列表 let city = document.getElementById('city'); //把之前的所有選項(xiàng)清掉 city.innerHTML = ’<option value=''>---請(qǐng)選擇城市---</option>’ citys.forEach((ele,idx)=>{ //ele.c_name;//市的名稱 // ele.c_id;//市的id city.innerHTML += ’<option value='’+ele.c_id+’'>’+ele.c_name+’</option>’ }); } }); }</script></html>
具體實(shí)現(xiàn)如下,發(fā)現(xiàn)城市數(shù)據(jù)存的很深,要通過(guò)省來(lái)查找城市會(huì)比較麻煩,而且循環(huán)遍歷的是指數(shù)級(jí)的占內(nèi)存,通過(guò)下面數(shù)據(jù)結(jié)構(gòu)的優(yōu)化,相對(duì)而言,查詢會(huì)更容易實(shí)現(xiàn)大概的思路是通過(guò)map集合,key找value的思路存入的時(shí)候省,單獨(dú)放。城市的key等于省的p_id,因?yàn)橛辛藰?biāo)識(shí),這樣就很容易相互查詢了
//準(zhǔn)備數(shù)據(jù)--- <!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>快速入門</title></head><body> <div> <select name='province'> <option value=''>---請(qǐng)選擇省---</option> </select> </div> <div> <select name='city' > <option value=''>---請(qǐng)選擇城市---</option> </select> </div></body><script src='http://www.aoyou183.cn/bcjs/js/jquery-3.3.1.min.js'></script><script> let data = [ { p_name:'浙江省', p_id:1, }, { p_name:'湖北省', p_id:2, }, ]; let city={1:[ { c_name:'杭州市', c_id:100 }, { c_name:'溫州市', c_id:101 }, { c_name:'寧波市', c_id:102 }, { c_name:'嘉興市', c_id:103 }, { c_name:'湖州市', c_id:104 }, { c_name:'紹興市', c_id:105 }, { c_name:'金華市', c_id:106 }, ], 2:[ { c_name:'武漢市', c_id:200 }, { c_name:'黃石市', c_id:201 }, { c_name:'十堰市', c_id:202 }, { c_name:'襄陽(yáng)市', c_id:204 }, { c_name:'荊州市', c_id:205 }, { c_name:'黃岡市', c_id:206 }, ] } data.forEach((e,i)=>{ $('#province').append(’<option value='’+e.p_id+’'>’+e.p_name+’</option>’) }) $('#province').change(function(){ $('#city').empty(); let num= this.value; city[num].forEach((e,i)=>{ $('#city').append(’<option value='’+e.c_id+’'>’+e.c_name+’</option>’) }) }) </script></html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. CSS3中Transition屬性詳解以及示例分享2. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享3. asp.net core項(xiàng)目授權(quán)流程詳解4. ASP常用日期格式化函數(shù) FormatDate()5. html中的form不提交(排除)某些input 原創(chuàng)6. jsp文件下載功能實(shí)現(xiàn)代碼7. js select支持手動(dòng)輸入功能實(shí)現(xiàn)代碼8. vue使用moment如何將時(shí)間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時(shí)間格式9. 開(kāi)發(fā)效率翻倍的Web API使用技巧10. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫(huà)特效
