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 相关文章推荐
jquery 指南/入门基础
Nov 30 Javascript
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
jquery 选择器引擎sizzle浅析
Feb 06 Javascript
jQuery动画特效实例教程
Aug 29 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
Dec 26 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 Javascript
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
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 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
Python中将dataframe转换为字典的实例
2018/04/13 Python
python保存网页图片到本地的方法
2018/07/24 Python
使用TensorFlow实现SVM
2018/09/06 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
在django中,关于session的通用设置方法
2019/08/06 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
创业计划书中包含的9个方面
2013/12/26 职场文书
婚前财产协议书范本
2014/10/19 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
2015年消防工作总结
2015/04/24 职场文书
社区低保工作总结2015
2015/07/23 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL