js实现省级联动(数据结构优化)


Posted in Javascript onJuly 17, 2020

本文实例为大家分享了js实现省级联动的具体代码,供大家参考,具体内容如下

<!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 id="province" name="province">
   <option value="">---请选择省---</option>
  </select>
 </div>
 <div>
  <select id="city" name="city">
   <option value="">---请选择城市---</option>
  </select>
 </div>
</body>
<script>
 //准备数据---
 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:"襄阳市",
     c_id:204
    },
    {
     c_name:"荆州市",
     c_id:205
    },
    {
     c_name:"黄冈市",
     c_id:206
    },
   ]
  },
  {
   p_name:"山东省",
   p_id:3,
   citys:[
    {
     c_name:"济南市",
     c_id:300
    },
    {
     c_name:"青岛市",
     c_id:301
    },
    {
     c_name:"淄博市",
     c_id:302
    },
    {
     c_name:"枣庄市",
     c_id:303
    },
    {
     c_name:"烟台市",
     c_id:304
    },
    {
     c_name:"日照市",
     c_id:305
    },
   ]
  }
 ];

 // 加载所有的省份信息到一级的下拉列表中
 let province = document.getElementById("province");
 data.forEach((e,i)=>{
  province.innerHTML += '<option value="'+e.p_id+'">'+e.p_name+'</option>'
 });
 //给一级下拉列表绑定onchange事件
 province.onchange = function(){
  // this.value;//选择的省的id
  // alert(this.value);
  //根据省的id去找该省对应的市的信息

  data.forEach((e,i)=>{
   if(e.p_id == this.value){
    let citys = e.citys;
    //将所有的市的信息填充到二级的下拉列表
    let city = document.getElementById("city");

    //把之前的所有选项清掉
    city.innerHTML = '<option value="">---请选择城市---</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>

具体实现如下,发现城市数据存的很深,要通过省来查找城市会比较麻烦,而且循环遍历的是指数级的占内存,通过下面数据结构的优化,相对而言,查询会更容易
实现大概的思路是通过map集合,key找value的思路
存入的时候省,单独放。城市的key等于省的p_id,因为有了标识,这样就很容易相互查询了

//准备数据---
 <!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 id="province" name="province">
   <option value="">---请选择省---</option>
  </select>
 </div>
 <div>
  <select id="city" name="city" >
   <option value="">---请选择城市---</option>
  </select>
 </div>
</body>
<script src="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:"襄阳市",
     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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE与firefox之jquery用法区别
Oct 03 Javascript
js操作ajax返回的json的注意问题!
Feb 23 Javascript
jQuery表格行换色的三种实现方法
Jun 27 Javascript
JavaScript 原型继承之构造函数继承
Aug 26 Javascript
js 获取(接收)地址栏参数值的方法
Apr 01 Javascript
javascript 3d 逐侦产品展示(核心精简)
Mar 26 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
Oct 11 Javascript
基于Vue如何封装分页组件
Dec 16 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
JavaScript函数重载操作实例浅析
May 02 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 15 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 #Javascript
jquery实现有过渡效果的tab切换
Jul 17 #jQuery
使用Vue-cli 中为单独页面设置背景图片铺满全屏
Jul 17 #Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 #Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
Jul 17 #Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 #Javascript
基于js实现判断浏览器类型代码实例
Jul 17 #Javascript
You might like
PHP 实例化类的一点摘记
2008/03/23 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
自制PHP框架之设计模式
2017/05/07 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
简单了解python的break、continue、pass
2019/07/08 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
学校七一活动方案
2014/01/19 职场文书
村党支部公开承诺书
2014/05/29 职场文书
片区教研活动总结
2014/07/02 职场文书
公积金贷款承诺书
2015/04/30 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
golang连接MySQl使用sqlx库
2022/04/14 Golang