城市数据来自于腾讯地图-

腾讯地图api http://lbs.qq.com/webservice_v1/guide-region.html

1.设计思路

1.因为是传城市ID获取下级城市数据-所以这里做了一个缓存-sessionStorage,就是城市ID来作为KEY值,这样加载过的就可以读取缓存来加载数据了,最新的就去腾讯上面获取数据

2.因为并发限制:5次/秒/接口/Key-所以多个城市一起加载的时候-后面加载的需要延迟一点时间加载(我这里延迟了500)

2.实现接口

 我这里的key使用开放的  key = "WIIBZ-D5F33-ZMD3E-YEOJJ-AMZOS-YKB7K";

 getchildren接口:https://apis.map.qq.com/ws/district/v1/getchildren

使用jq 的ajax获取数据--下面获取省级数据:

例子1:

$.ajax({url: "https://apis.map.qq.com/ws/district/v1/getchildren",dataType: "jsonp",data: {output: "jsonp",key: key},cache: false,success: function(data) {var searchContext = data.result[0];    }})

那么,获取市级/县级就在以上的例子的data中加多一个id即可

data: {output: "jsonp",key: key,id:cityId},

原理:

1.自定义插件方法

了解$.fn和$.extend自定义插件

2.三级联动

1.省-》市-》县   2.市-》县   3.县

操作:点击省-》后面联动市和县-

同理操作 市 就 只联动县  ,

那么操作县,就停止往下操作

效果图:

代码:

js:

/**@Name : QQ腾讯地图 三级联动插件@Author: chen RiGuang@Date: 2018-07-13*/
var Storage = window.sessionStorage;
var key = "WIIBZ-D5F33-ZMD3E-YEOJJ-AMZOS-YKB7K";
//省
var $a=1;
(function($) {var ms = {init: function(obj, args) {return(function() {if($a==1){//腾讯地图单个key每秒最高5次,多个地图插件同时使用时延迟实例创建执行ms.AllprovinceData(obj, args);ms.bindEvent(obj, args);$a++;}else{setTimeout(function(){ms.AllprovinceData(obj, args);ms.bindEvent(obj, args);},500)}})();},//省数据AllprovinceData: function(obj, args) {return(function() {var searchContext = Storage.getItem("provinceData");if(searchContext != null) {searchContext = JSON.parse(searchContext);ms.AllprovinceHtml(obj, args, searchContext)} else {$.ajax({url: "https://apis.map.qq.com/ws/district/v1/getchildren",dataType: "jsonp",data: {output: "jsonp",key: key},cache: false,success: function(data) {var searchContext = data.result[0];Storage.setItem("provinceData", JSON.stringify(data.result[0]));ms.AllprovinceHtml(obj, args, searchContext)}})}})();},//回填省HTMLAllprovinceHtml: function(obj, args, searchContext) {var CityHtml = '<div class="selectCity"><div class="selectTest"></div>' +'<div class="iconDown"></div>' +'</div>' +'<div class="selectTestBox">' +'<ul class="ub-fh"></ul>' +'</div>';var cityBox = '<div class="clear">' +'<div name="' + args.provinceId + '" class="' + args.provinceId + '  countryTd">' + CityHtml + '</div>' +'<div name="' + args.cityId + '" class="' + args.cityId + ' countryTd">' + CityHtml + '</div>' +'<div name="' + args.districtId + '" class="' + args.districtId + ' countryTd">' + CityHtml + '</div>' +' </div>';obj.append(cityBox);var listLi = '<li class="listSelect"></li>';var ifSetCity = false;$.each(searchContext, function(i, n) {var $clone = $(listLi).clone();$clone.text(n.fullname);$clone.attr("id-value", n.id);$clone.attr("name", n.fullname);if(n.fullname == args.province) {ifSetCity = true;$clone.addClass('active-this');obj.find("." + args.provinceId + ' .selectTest').attr("pid", n.id);}obj.find("." + args.provinceId + ' ul').append($clone);})if(ifSetCity) {obj.find("." + args.provinceId + ' .selectTest').attr("title",args.province);obj.find("." + args.provinceId + ' .selectTest').text(args.province);} else {obj.find("." + args.provinceId + ' ul li').eq(0).addClass("active-this");obj.find("." + args.provinceId + ' .selectTest').text(obj.find("." + args.provinceId + ' ul li').eq(0).text());obj.find("." + args.provinceId + ' .selectTest').attr("pid", obj.find("." + args.provinceId + ' ul li').eq(0).attr("id-value"));}var provincePid = obj.find("." + args.provinceId + ' .selectTest').attr("pid");ms.AllCityData(obj, args, provincePid, 1)},//市-县数据AllCityData: function(obj, args, cityid, $ide) {return(function() {var searchContext = Storage.getItem(cityid);if(searchContext != null) {var cityData = JSON.parse(searchContext)ms.AllCityHtml(obj, args, cityData, $ide)} else {$.ajax({url: "https://apis.map.qq.com/ws/district/v1/getchildren",dataType: "jsonp",data: {output: "jsonp",key: key,id: cityid},cache: false,success: function(data) {if(data.message == "错误的id") {return;} else if(data.message=="此key每秒请求量已达到上限"){location.reload();}else{Storage.setItem(cityid, JSON.stringify(data.result[0]));var cityData = data.result[0];ms.AllCityHtml(obj, args, cityData, $ide);}}})}})();},//回填市县数据AllCityHtml: function(obj, args, cityData, $ide) {return(function() {var nameId = "";var $name = "";if($ide == 1) {nameId = args.cityId;$name = args.city;} else if($ide == 2) {nameId = args.districtId;$name = args.district;}var listLi = '<li class="listSelect uinn-l"></li>';var ifSetCity = false;$.each(cityData, function(i, n) {var $clone = $(listLi).clone();$clone.text(n.fullname);$clone.attr("id-value", n.id);$clone.attr("name", n.fullname);if(n.fullname == $name) {ifSetCity = true;$clone.addClass('active-this');obj.find("." + nameId + ' .selectTest').attr("pid", n.id);}obj.find("." + nameId + ' ul').append($clone);})if(ifSetCity) {obj.find("." + nameId + ' .selectTest').text($name);obj.find("." + nameId + ' .selectTest').attr("title",$name);} else {obj.find("." + nameId + ' ul li').eq(0).addClass("active-this");obj.find("." + nameId + ' .selectTest').text(obj.find("." + nameId + ' ul li').eq(0).text());obj.find("." + nameId + ' .selectTest').attr("title",obj.find("." + nameId + ' ul li').eq(0).text());obj.find("." + nameId + ' .selectTest').attr("pid", obj.find("." + nameId + ' ul li').eq(0).attr("id-value"));}var provincePid = obj.find("." + nameId + ' .selectTest').attr("pid");if($ide == 1) {ms.AllCityData(obj, args, provincePid, 2)} else if($ide == 2) {var province = obj.find("." + args.provinceId + ' .selectTest').text();var city = obj.find("." + args.cityId + ' .selectTest').text();var district = obj.find("." + args.districtId + ' .selectTest').text();var selectDATA = {province: province,city: city,district: district}args.backFn(selectDATA);}})();},//绑定事件bindEvent: function(obj, args) {return(function() {// 空白事件$(document).click(function(e) { // /父区域 居住地select显示隐藏$.each($('.countryTd'), function(i, n) {var _con = $(n);if(!_con.is(e.target) && _con.has(e.target).length === 0) {_con.find('.selectTestBox').hide(); // 空白事件}})})// 点击城市框obj.on("click",".selectCity",function(){var countryTd = $(this).parents(".countryTd").attr("name");var _thisId = obj.find("." + countryTd);if($(this).siblings(".selectTestBox").is(":hidden")) {_thisId.find(".selectTestBox").show();} else {_thisId.find(".selectTestBox").hide();}})// 选中城市下拉obj.on("click",".listSelect",function(){var test = $(this).text();var $id = $(this).attr("id-value");var countryTd = $(this).parents(".countryTd").attr("name");var _thisId = obj.find("." + countryTd);$(this).addClass("active-this").siblings().removeClass("active-this");obj.find(".selectTestBox").hide();if(test != _thisId.find('.selectTest').text()) {_thisId.find('.selectTest').text(test);_thisId.find('.selectTest').attr("title",test);if(countryTd == args.provinceId) {//省obj.find('.' + args.cityId+" "+"ul").html("");obj.find('.' + args.districtId+" ul").html("");ms.AllCityData(obj, args, $id, 1);} else if(countryTd == args.cityId) {//市obj.find('.' + args.districtId +" ul").html("");ms.AllCityData(obj, args, $id, 2)}}})})();}}$.fn.createPage = function(options) {var args = $.extend({provinceId: "province",cityId: "city",districtId: "district",province: '广东省',city: '广州市',district: '天河区',backFn: function() {}}, options);ms.init(this, args);}
})(jQuery)

html:

<!DOCTYPE html>
<html><head><head><meta charset="UTF-8"><title></title></head><style type="text/css">*{ padding: 0; margin: 0; }ol, ul,li { list-style: none; }.box{width: 500px;margin: 20px auto;}#city2{margin-top: 20px;}.clear:after {visibility: hidden;clear: both;display: block;width: 0;height: 0;content: ".";}.selectTestBox {max-height: 200px;overflow: auto;border: 1px solid #e1e1e1;position: absolute;z-index: 666;left: 0;display: none;cursor: pointer;background: #FFFFFF;width: 100%;}.selectCity {height: 36px;line-height: 36px;overflow: hidden;background: #F5F5F5;position: relative;}.selectTest {padding: 0 20px 0 10px;max-width: 100%;height: 100%;cursor: pointer;}.listSelect {min-height: 36px;line-height: 36px;padding-left: 10px;}.listSelect:hover {background: #ececec;color: #000000;}.active-this,.active-this:hover {background: #33bb67;color: #FFFFFF;}.iconDown {background: url(icon_more_bottom.png) no-repeat center;right: 5px;top: 0px;z-index: 2;width: 10px;height: 100%;position: absolute;}.countryTd:first-child+.countryTd {margin: 0 20px;}.countryTd {width: 150px;position: relative;float: left;}</style><body><div class="box"><div id="city1"></div><div id="city2"></div></div></body><script src="jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script><script src="TXCity-min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$("#city1").createPage({            province: '广东省',city: '广州市',district: '天河区',backFn: function(data) {console.log(data)}});$("#city2").createPage({               province: '广东省',city: '深圳市',district: '罗湖区',backFn: function(data) {console.log(data)}});</script>
</html>

使用方法:

$("#city2").createPage({       province: '广东省',city: '深圳市',district: '罗湖区',backFn: function(data) {console.log(data)}
});

新手上路,不喜勿喷

不喜欢复制粘贴的豪哥们看这里,直接下载源码:https://download.csdn.net/download/m0_37596829/10543648

代码繁琐-跪求路过大神指点一下萌新--嘤嘤嘤嘤

腾讯地图城市选择插件-三级联动相关推荐

  1. 【Ajax Servlet JSP MySQL】Ajax实现省份地区选择:三级联动

    三级联动效果展示 环境 Eclipse for Java EE MySQL数据库 相关使用语言 Java(Java,Servlet后台处理) Web(HTML,CSS,JS,JSON,GSON.JS与 ...

  2. jQuery世界国家城市选择插件

    下载地址 这款jQuery国家选择插件样式挺好看,世界国家城市多级联动选择功能很强大,不仅支持全世界各个国家城市的多级联动,而且每一级都支持关键词搜索,可以快速定位需要选择的国家和城市. dd:

  3. 基于mint-ui的城市选择3级联动

    1.实际效果 2.首先你需要去下载一个包含中国省份,城市,区县的数据 如下: https://github.com/artiely/Administrative-divisions-of-China( ...

  4. 演员选择框三级联动(原生javascript和jquery实现)

    使用Jquery做成选择演员选择框的三级联动效果.代码如下,测试可以下载附件. <html><head><meta http-equiv="Content-Ty ...

  5. html中选择省份城市,省份、城市、区县三级联动Html代码

    $(function(){ function objInit(obj){ return $(obj).html("请选择"); } var arrData = { 江西省:{宜春市 ...

  6. 城市选择插件 V-Distpicker 组件详解以及全套用法

    首先第一步,这个插件是一定要在vue项目中使用的 一,安装 使用 npm 安装: npm install v-distpicker --save 使用 yarn 安装 yarn add v-distp ...

  7. HTML+CSS+JS实现 ❤️echarts省市区地图城市选择❤️

    效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0; }body {font-family: Exo, '-apple-system', 'Open ...

  8. 省份城市区县三级联动html代码,基于Jquery实现省份、城市、区县三级联动

    -//W3C//DTD HTML 4.01 Transitional//EN" ";> $(document).ready(function(){ //省份城市数组 var ...

  9. jquery仿携程网城市选择插件

    效果------- HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

最新文章

  1. linux mysql设置数据库utf_Linux系统下MySQL数据库服务器字符集设置
  2. 用辩证、动态的眼光看世界
  3. HANA Calculation View
  4. 【转】FPGA到底是啥?
  5. mysql创建表并初始化_MainSetup初始化进行创建表(mysql)失败
  6. 一个多线程练习,为什么直接运行和debug结果不一样
  7. Python中近期Pandas使用总结
  8. 面试复习笔记二(javaweb)
  9. 大数据核心技术是什么?
  10. [湖南大学程序设计实训训练作业一]7.F1方程式冠军(灵活运用下标来简化代码)
  11. MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
  12. 008_SSSS_ Improved Denoising Diffusion Probabilistic Models
  13. 【转载】Red Hat Enterprise Linux ISO 45678版本镜像下载【网盘资源】
  14. hosts文件恢复如初方法
  15. Photoshop液化工具塑造完美的脸型
  16. Arduino实时时钟设计(TM1637数码管显示)
  17. python print 函数出错
  18. 2019年海淀区中小学生信息学奥林匹克竞赛的活动方案
  19. 加速研发自动驾驶卡车,戴姆勒买下Torc Robotics多数股权...
  20. 根据今天时星期几,输出当天工作安排,学校安排周一到周五学习编程,周六上机实验,周日休息 例如: 键盘上输入4,控制台输出学习编程

热门文章

  1. Chrome 23 发布,带来 DNT 和图形硬件加速
  2. 学习 Node.js 一本书就够了【送书】
  3. 用matlab实现女声变男声步骤,男声变女声matlab程序
  4. 机器学习三大框架对比
  5. 金额查错—某财务部门结账时发现总金额不对头。很可能是从明细上漏掉了某1笔或几笔
  6. 86400000L什么意思?
  7. win10 访问文件服务器,如何在Win10上使用SMBv1访问网络设备上的文件
  8. 【算法】打家劫舍系列
  9. SuperMap iObject常见问题解答集锦(八)
  10. moto v9是否支持java_MOTO GUZZI操控大师V9的两个版本该如何选?