javascript讀取以json形式儲存的省市級聯效果
這裡是具有級聯效果的省市功能,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> a{ color:#000; text-decoration:none; } a:hover{ color:#F00; } #menu{ width:100px; border:1px solid #CCC; border-bottom:none; } #menu ul{ list-style:none; margin:0px; padding:0px; } #menu ul li{ background:#eee; padding:0px 8px; height:26px; line-height:26px; border-bottom:1px solid #CCC; position:relative; } #menu ul li ul{ display:none; position:absolute; left:100px; top:0px; width:100px; border:1px solid #ccc; border-bottom:none; } #menu ul li.current ul{ display:block; } #menu ul li ul li{ text-align:center; } </style> <script type="text/javascript"> var provs = { "江西省": ["南昌市", "景德鎮", "九江", "鷹潭", "萍鄉", "新餘", "贛州", "吉安", "宜春", "撫州", "上饒"], "福建省": ["福州", "廈門", "莆田", "三明", "泉州", "漳州", "南平", "龍巖", "寧德"], "河北省": ["石家莊", "邯鄲", "邢臺", "保定", "張家口", "承德", "廊坊", "唐山", "秦皇島", "滄州", "衡水"], "四川省": ["成都市", "自貢市", "攀枝花市", "瀘州市", "德陽市", "綿陽市", "廣元市", "遂寧市"], "山西省": ["太原市", "大同市", "陽泉市", "長治市", "晉城市", "朔州市", "晉中市", "運城市"], "內蒙古": ["呼和浩特市", "包頭市", "烏海市", "赤峰市", "通遼市", "鄂爾多斯市", "呼倫貝爾市"], "海南省": ["海口市", "三亞市"], "重慶市": ["重慶"], "貴州省": ["貴陽市", "六盤水市", "遵義市", "安順市", "銅仁地區", "黔西南布依族苗族自治州"], "甘肅省": ["蘭州市", "嘉峪關市", "金昌市", "白銀市", "天水市", "武威市", "張掖市", "平涼市"], "青海省": ["西寧市", "海東地區", "海北藏族自治州", "黃南藏族自治州", "海南藏族自治州"], "寧夏自治區": ["銀川市", "石嘴山市", "吳忠市", "固原市", "中衛市"] }; function iniEvent(){ var provUL=document.getElementById("prov"); if(provUL){ var allli=provUL.getElementsByTagName("li"); for(index=0;index<allli.length;index++) { node=allli[index]; node.onmouseover=function(){ this.className="current"; } node.onmouseout=function(){ this.className=this.className.replace("current",""); } } } } function loadData(){ var provUL=document.getElementById("prov"); var nIndex=0; for (var key in provs){ var provLi = document.createElement("li"); provLi.id = "provLI" + nIndex; provLi.innerHTML = "<a href='#'>" + key + "</a>"; provUL.appendChild(provLi); var citys = provs[key]; if (citys.length > 0) { var cityUL = document.createElement("ul"); var maxLength = 0; for (var index = 0; index < citys.length; index++) { var cityName = citys[index]; if (cityName.length > maxLength) { maxLength = cityName.length; } var cityLI = document.createElement("li"); cityLI.id = "cityLI" + index; cityLI.innerHTML = "<a href='#'>" + cityName + "</a>"; cityUL.appendChild(cityLI); } if (maxLength <= 6) { maxLength = 100; } else { maxLength = maxLength * 20; } maxLength = maxLength + "px"; cityUL.style.width= maxLength; provLi.appendChild(cityUL); } nIndex++; } iniEvent(); } window.onload=function(){ loadData(); } </script> </head> <body> <div id="menu"> <ul id="prov"></ul> </div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).var provs = { },存有省市的json結構資料(一個物件直接量)。
(2).function iniEvent(){},此方法實現了事件處理函式的註冊功能。
(3).var provUL=document.getElementById("prov"),獲取id屬性值為prov的ul元素的物件。
(4).if(provUL),判斷元素是否存在。
(5).var allli=provUL.getElementsByTagName("li"),獲取下面的li元素物件集合。
(6).for(index=0;index<allli.length;index++) {},遍歷每一個li元素物件。
(7).node=allli[index],獲取指定索引的li元素物件。
(8).node.onmouseover=function(){
this.className="current";
},為li元素註冊onmouseover事件處理函式。
也就是滑鼠懸浮的時候為當前元素新增class樣式值current。由於css程式碼如下:
#menu ul li.current ul{
display:block;
} ,所以是給第一級的li元素新增樣式類,使下面的ul元素顯示,也就是讓城市顯示。
(9).node.onmouseout=function(){
this.className=this.className.replace("current","");
},刪除新增的樣式類值。
(10).function loadData(){ },此函式實現了讀取省市並且放置於ul li中。
(11).var provUL=document.getElementById("prov"),獲取id屬性值為prov的元素,也就是這裡的ul元素。
(12).var nIndex=0,宣告一個變數並賦值為0,用來作為id的一部分,它是變化的。
(13).for (var key in provs){},遍歷json格式物件。
(14).var provLi = document.createElement("li"),建立一個li元素物件,用來防止省份。
(15).provLi.id = "provLI" + nIndex,為當前li元素新增id屬性並賦值。
(16).provLi.innerHTML = "<a href='#'>" + key + "</a>",設定li元素的內容,其實就是省份。
(17).provUL.appendChild(provLi),將li元素新增到ul中。
(18).var citys = provs[key],獲取城市,citys是一個陣列。
(19).if (citys.length > 0) {},如果陣列長度大於0,那麼說明存在城市。
(20).var cityUL = document.createElement("ul"),建立ul元素,用來防止城市。
(21).var maxLength = 0,宣告一個變數並賦值為0,它是用來儲存ul元素的寬度的。
(22).for (var index = 0; index < citys.length; index++) {},遍歷陣列中的每一個元素。(23).var cityName = citys[index],獲取城市名稱。
(24).if (cityName.length > maxLength) { maxLength = cityName.length;
},如果城市名稱的長度大於maxLength,那麼就將maxLength值設定為城市名稱的長度。
(25).var cityLI = document.createElement("li"),建立li元素物件。
(26).cityLI.id = "cityLI" + index,設定元素的id屬性值。
(27).cityLI.innerHTML = "<a href='#'>" + cityName + "</a>",將城市放置於li元素中。
(28).cityUL.appendChild(cityLI),將li元素放置於ul中。
(29).if (maxLength <= 6) {
maxLength = 100;
}
else {
maxLength = maxLength * 20;
},如果長度小於等於6,那麼就將它的值設定為100。
否則的話長度設定為maxLength * 20。
二.相關閱讀:
(1).getElementsByTagName()方法可以參閱document.getElementsByTagName()一章節。
(2).onmouseover事件可以參閱javascript的onmouseover事件一章節。
(3).className可以參閱js的className屬性詳解一章節。
(4).onmouseout事件可以參閱javascript的onmouseout事件詳解一章節。
(5).replace()可以參閱javascript的replace()函式用法詳解一章節。
(6).document.createElement()可以參閱document.createElement()方法用法介紹一章節。
(7).appendChild()可以參閱javascript的insertBefore()函式和appendChild()用法一章節。
相關文章
- JavaScript 省市級聯效果JavaScript
- JavaScript省市級聯效果詳解JavaScript
- JavaScript 省市級聯選單原理JavaScript
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 讀取和儲存Excel表Excel
- 利用JavaScript實現註冊頁面省市聯動效果(附程式碼)JavaScript
- 原生javascript製作省市區三級聯動詳細教程JavaScript
- NOPI讀取Word模板並儲存
- 省市縣三級聯動(2)
- 省市縣三級聯動(1)
- 儲存json檔案JSON
- Excel 讀取圖片並獲取儲存路徑Excel
- 蘋果加密郵件不完全,部分加密資料以明文形式儲存蘋果加密
- java讀取倒序儲存的int型資料Java
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- 獲取jwt(json web token)中儲存的使用者資訊JWTJSONWeb
- (slam工具)1檔案讀取和儲存SLAM
- golang 讀取切分儲存byte流檔案Golang
- python 儲存檔案jsonPythonJSON
- vue 省市區三級聯動外掛Vue
- JavaScript 本地儲存JavaScript
- python gdal 基於shp檔案裁剪geotif圖並以最小外接矩形形式儲存Python
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- 讀取JSON資料JSON
- 將Chrome偵錯程式裡的JavaScript變數儲存成本地JSON檔案ChromeJavaScript變數JSON
- mysql之json型別與文字儲存json的優勢MySqlJSON型別
- matlab呼叫攝像頭並儲存成幀的形式Matlab
- 通過Python爬取國家統計局省市區三級地址庫(支援MySQL和JSON格式)PythonMySqlJSON
- Python中檔案讀取與儲存程式碼示例Python
- spark學習筆記--資料讀取與儲存Spark筆記
- python讀取json格式的標註PythonJSON
- JSON形式跨域JSON跨域
- 符合 iview 資料規則的省市區三級聯動View
- 一文詳解 JuiceFS 讀效能:預讀、預取、快取、FUSE 和物件儲存UI快取物件
- 最新最完整的省市縣json資料JSON
- JavaScript本地儲存的方式有哪些JavaScript
- Machine Learning (3) - 介紹兩種儲存和讀取模型的方式Mac模型
- JavaScript 讀取cookieJavaScriptCookie
- 基於layui的省市區三級聯動(資料互動)UI