zoukankan      html  css  js  c++  java
  • jq省份城市区街道数据整理成树型json并放到页面供网友选择

            懂得数据整理很重要,数据量大的时候如果要手工整理,眼睛估计要罢工,我之前爬取回来的数据,先转成ecxel,需要整理成json才可以在页面使用,之前常用的整理方法如下:在Notepad++编辑软件中(不同的编辑器,正则会有点出入,我习惯使用Notepad++),使用正则替换,查找:(S+)s+(S+)s+(S+)s+(S+)  替换为:{'key_0':'$1','key_1':'$2','key_2':'$3','key_3':'$4'},就会得到json格式的数据:

          数据量少的情况,就可以放到页面使用了,

    但是街道数据庞大,我想整理成一棵树,一级只有省份,省份下一级只有城市

    这样遍历的次数能比较少,不会造成页面卡顿。一棵树的结构如下:

    拼接这份数据,我用的是js,花了不少时间

    主要原因还是因为数据量大,json数据格式不熟,最后的代码如下:

     1 <html>
     2     <head>
     3         <meta charset="UTF-8">
     4     </head>
     5 <body>
     6 <script src="https://www1.pcauto.com.cn/test/2104/llf/sp/data.js"></script>
     7 <script>
     8 (function(){
     9     var proI=0,cityI=0,quI=0,jI=0;
    10     var pro_String = 'var kxDataProvince = [';
    11     var u=0;
    12     var k=0;
    13     var quL=0;
    14     var qcity=0;
    15     var j=0;
    16     var i=0;
    17     var ii=0;
    18     var newPro=true;
    19     var thisN=1;
    20     var isD=true;
    21     for(;i<allData.length;i=ii){
    22         if(i==0){
    23             pro_String =pro_String+'{"ID":"'+proI+'","NAME":"'+allData[i].key_0+'","ITEMS":[{"ID":"'+cityI+'","NAME":"'+allData[i].key_1+'","ITEMS":[{"ID":"'+quI+'","NAME":"'+allData[i].key_2+'","ITEMS":[{"ID":"'+jI+'","NAME":"'+allData[i].key_3+'"}';
    24             proI++;
    25             cityI++;
    26             quI++;
    27             jI++;
    28             ii++;
    29         }else{
    30             if(allData[i].key_0==allData[i-1].key_0){
    31                 if(allData[i].key_1==allData[i-1].key_1){
    32                     if(allData[i].key_2==allData[i-1].key_2){
    33                         pro_String =pro_String+','+'{"ID":"'+jI+'","NAME":"'+allData[i].key_3+'"}';
    34                         jI++;
    35                     }else{
    36                         pro_String =pro_String+']}';
    37                         pro_String =pro_String+',{"ID":"'+quI+'","NAME":"'+allData[i].key_2+'"'+',"ITEMS":[{"ID":"'+jI+'","NAME":"'+allData[i].key_3+'"}';
    38                         quI++;
    39                         jI++;
    40                     }
    41                 }else{
    42                     pro_String =pro_String+']}]}';
    43                     pro_String =pro_String+',{"ID":"'+cityI+'","NAME":"'+allData[i].key_1+'"'+',"ITEMS":[{"ID":"'+quI+'","NAME":"'+allData[i].key_2+'"'+',"ITEMS":[{"ID":"'+jI+'","NAME":"'+allData[i].key_3+'"}';
    44                     cityI++;
    45                     quI++;
    46                     jI++;
    47                 }
    48             }else{
    49                 pro_String =pro_String+']}]}]}';
    50                 pro_String =pro_String+',{"ID":"'+proI+'","NAME":"'+allData[i].key_0+'"'+',"ITEMS":[{"ID":"'+cityI+'","NAME":"'+allData[i].key_1+'"'+',"ITEMS":[{"ID":"'+quI+'","NAME":"'+allData[i].key_2+'"'+',"ITEMS":[{"ID":"'+jI+'","NAME":"'+allData[i].key_3+'"}';
    51                 proI++;
    52                 cityI++;
    53                 quI++;
    54                 jI++;
    55             }
    56             ii++
    57         }
    58     }
    59     pro_String=pro_String+"]}]}";
    60     pro_String=pro_String+"]}]";
    61     document.write(pro_String);
    62     document.write("<br>");
    63 
    64 
    65 
    66 })();
    67 </script>
    68 </body>
    69 </html>

        运行之后,得到的就是一颗树了:

    https://www1.pcauto.com.cn/test/2104/llf/sp/areaSsqjAll.js

    然后在页面上使用就很方便了,我用的是jq:

    1 <textarea onClick="getProvinceBuy()" class="adressText shengshi" style="height:0.7rem;" type="text" placeholder="省、市、区、街道"></textarea>
      1 $(".shengshi").focus(function(){
      2     document.activeElement.blur();
      3 });
      4 function getByteLen(val) {
      5     var len = 0;
      6     for (var i = 0; i < val.length; i++) {
      7          var a = val.charAt(i);
      8          if (a.match(/[^x00-xff]/ig) != null) 
      9         {
     10             len += 2;
     11         }
     12         else
     13         {
     14             len += 1;
     15         }
     16     }
     17     return len;
     18 }
     19 
     20 //加载省份
     21 function getProvinceBuy(){
     22     if($(".shengshi").val()!=""){
     23         $(".shengshi").val="";
     24     }
     25     $("body .dqld_div").remove();
     26     var province=eval(proStr);
     27     var newStr=new Array();
     28     newStr.push("<div class="dqld_div" style=""><ul>");
     29     for(var i=0,psize=province.length;i<psize;i++){
     30         newStr.push("<li onclick="getCityBuy("+i+")">"+province[i].NAME+"</li>");
     31     }
     32     newStr.push("</ul></div>");
     33     $("body").append(newStr.join(""));
     34     }
     35 //加载城市
     36 function getCityBuy(val){
     37     var province=eval(proStr);
     38     var city=eval(province[val].ITEMS);
     39     var newStr=new Array();
     40     newStr.push("<div class="dqld_div"><ul>");
     41     newStr.push("<li onclick="getProvinceBuy()" style="margin-left: -2rem;">"+province[val].NAME+"</li>");
     42     for(var j=0,csize=city.length;j<csize;j++){
     43         newStr.push("<li onclick="getAreaBuy("+j+","+val+")"  style="padding-left:20px;">"+city[j].NAME+"</li>");
     44     }
     45     newStr.push("</ul></div>");
     46     $("body .dqld_div").remove();
     47     $("body").append(newStr.join(""));
     48 }
     49 //加载区
     50 function getAreaBuy(val,val1){
     51     // val是城市id  val1是省份id
     52     var province=eval(proStr);
     53     var city=eval(province[val1].ITEMS);
     54     var area=eval(city[val].ITEMS);
     55     var newStr=new Array();
     56     newStr.push("<div class="dqld_div"><ul>");
     57     newStr.push("<li onclick="getProvinceBuy()" style="margin-left: -2rem;">"+province[val1].NAME+"</li>");
     58     newStr.push("<li onclick="getCityBuy("+val1+")" style="margin-left: -1.5rem;">"+city[val].NAME+"</li>");
     59     for(var t=0,asize=area.length;t<asize;t++){
     60         // newStr.push("<li  style="padding-left:25px;" onclick="getallArea("+val1+","+val+","+t+")">"+area[t].NAME+"</li>");
     61         newStr.push("<li  style="padding-left:25px;" onclick="getJieArea("+t+","+val+","+val1+")">"+area[t].NAME+"</li>");
     62     }
     63     newStr.push("</ul></div>");
     64     if(asize==0){
     65         var allarea=province[val1].NAME+city[val].NAME;
     66         $(".shengshi").attr({"SS":province[val1].NAME,"SQ":city[val].NAME,"XS":""});
     67         $(".shengshi").val(allarea);
     68         
     69         $("body .dqld_div").remove();
     70     }
     71     else{
     72         $("body .dqld_div").remove();
     73         $("body").append(newStr.join(""));
     74     }
     75 }
     76 //加载街道
     77 function getJieArea(val,val1,val2){
     78     //val是区  val1是城市,val2是省
     79     var province=eval(proStr);
     80     var city=eval(province[val2].ITEMS);
     81     var area=eval(city[val1].ITEMS);
     82     var jie=eval(area[val].ITEMS);
     83     var newStr=new Array();
     84     newStr.push("<div class="dqld_div"><ul>");
     85     newStr.push("<li onclick="getProvinceBuy()" style="margin-left: -2rem;">"+province[val2].NAME+"</li>");
     86     newStr.push("<li onclick="getCityBuy("+val2+")" style="margin-left: -1.5rem;">"+city[val1].NAME+"</li>");
     87     newStr.push("<li onclick="getAreaBuy("+val1+","+val2+")" style="margin-left: -1rem;">"+area[val].NAME+"</li>");
     88     for(var t=0,asize=jie.length;t<asize;t++){
     89         // newStr.push("<li  style="padding-left:25px;" onclick="getallArea("+val1+","+val+","+t+")">"+area[t].NAME+"</li>");
     90         newStr.push("<li  style="padding-left:25px;" onclick="getallArea("+t+","+val+","+val1+","+val2+")">"+jie[t].NAME+"</li>");
     91     }
     92     newStr.push("</ul></div>");
     93     if(asize==0){
     94         var allarea=province[val1].NAME+city[val].NAME;
     95         $(".shengshi").attr({"SS":province[val1].NAME,"SQ":city[val].NAME,"XS":""});
     96         $(".shengshi").val(allarea);
     97         
     98         $("body .dqld_div").remove();
     99     }
    100     else{
    101         $("body .dqld_div").remove();
    102         $("body").append(newStr.join(""));
    103     }
    104 }
    105 //返回选择的省城市区街道
    106 function getallArea(val,val1,val2,val3){
    107     //val是街道,val1是区  val2是城市,val3是省
    108     var province=eval(proStr);
    109     var city=eval(province[val3].ITEMS);
    110     var area=eval(city[val2].ITEMS);
    111     var jie=eval(area[val1].ITEMS);
    112     var allarea=province[val3].NAME+city[val2].NAME+area[val1].NAME+jie[val].NAME;
    113     $(".thisX").hide();
    114     $(".shengshi").val(allarea);
    115     var l=getByteLen(allarea);
    116     if(l>28){
    117         $(".shengshi").css("lineHeight","0.35rem");
    118     }else{
    119         $(".shengshi").css("lineHeight","0.7rem");
    120     }
    121     $("body .dqld_div").remove();
    122 }
     1 <style>
     2  .dqld_div{
     3         width: 100%;
     4         position: fixed;
     5         bottom: 0;
     6         height: 6rem;
     7         background: white;
     8         z-index: 33333;
     9         text-align: center;
    10         background: white;
    11         color: black;
    12         overflow: scroll;
    13         border-top-left-radius: 29px;
    14         border-top-right-radius: 29px;
    15 
    16     }
    17     .dqld_div ul{
    18         width:100%;
    19     }
    20 
    21     .dqld_div ul li{
    22         height:35px;
    23         line-height:35px;
    24     }
    25 </style>

           得到的效果如下图:

         至此,终于完成了任务。

     

    欢迎大家来浏览我的博客,如发现我有写错的地方,欢迎交流指正。
  • 相关阅读:
    发布在《30天自制操作系统》之前的操作捷径必读贴
    写在《30天自制操作系统》上市之前
    JS跨域代码片段
    C#简单操作XML
    Application Session Cookie ViewState Cache Hidden 区别
    C# string 特殊引用类型
    精通CSS高级Web标准解决方案:相对定位与绝对定位
    精通CSS高级Web标准解决方案:浮动
    精通CSS高级Web标准解决方案:背景图像基础
    char、varchar、nchar、nvarchar的区别
  • 原文地址:https://www.cnblogs.com/lulu-beibei/p/14705964.html
Copyright © 2011-2022 走看看