当前位置: 首页 > news >正文

Html实现全国省市区三级联动

目录

前言

1.全国省市区的Json数据

2.找到Json数据文件(在此博文绑定资源)之后,放到resource目录下。

3.通过类加载器加载资源文件,读取Json文件

        3.1 创建JsonLoader类

          3.2 注入JsonLoader实体,解析Json文件 

4.构建前端Html页面

5.通过ajax获取从后端获取数据 

6.通过监听事件,完成Html省市区联动 

7.实现效果


前言

       关键技术:SpringBoot、Html、Jquery、js、ajax

        在网上找到的资料都比较乱,对于初学者来说,可能不太友好。以前,我刚开始学习Html的时候,也搞不清楚这个要怎么做,找了好久的资料都没法实现,就算是实现了,也没有完整的教程,现在实现了,整理好了,就想分享一下给每一位热爱编程的小伙伴。

1.全国省市区的Json数据

[{"province": "北京市","code": "110000","citys": [{"city": "北京市","code": "110100000000","areas": [{"area": "东城区","code": "110101000000"},{"area": "西城区","code": "110102000000"},{"area": "朝阳区","code": "110105000000"},{"area": "丰台区","code": "110106000000"},{"area": "石景山区","code": "110107000000"},{"area": "海淀区","code": "110108000000"},{"area": "门头沟区","code": "110109000000"},{"area": "房山区","code": "110111000000"},{"area": "通州区","code": "110112000000"},{"area": "顺义区","code": "110113000000"},{"area": "昌平区","code": "110114000000"},{"area": "大兴区","code": "110115000000"},{"area": "怀柔区","code": "110116000000"},{"area": "平谷区","code": "110117000000"},{"area": "密云区","code": "110118000000"},{"area": "延庆区","code": "110119000000"}]}]}
......此处省略好多个省市区。
]

2.找到Json数据文件(在此博文绑定资源)之后,放到resource目录下。

3.通过类加载器加载资源文件,读取Json文件

        3.1 创建JsonLoader类

package com.company.project.utils;import com.alibaba.fastjson.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;@Component
public class JsonLoader {@Autowiredprivate ResourceLoader resourceLoader;public JSONArray loadJsonFile(String fileName) throws IOException {Resource resource = resourceLoader.getResource("classpath:" + fileName);try (InputStream inputStream = resource.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {StringBuilder result = new StringBuilder();String line;while ((line = reader.readLine()) != null) {result.append(line).append("\n");}return JSONArray.parseArray(result.toString());}}
}

          3.2 注入JsonLoader实体,解析Json文件 

4.构建前端Html页面

<div class="layui-form" style="margin: 20px;"><div class="layui-form-item"><label class="layui-form-label">省份:</label><div class="layui-input-block"><select class="custom-select" name="province" id="province" lay-verify="required" lay-search=""><option value="">请选择省份</option></select></div></div><div class="layui-form-item"><label class="layui-form-label">城市:</label><div class="layui-input-block"><select class="custom-select"  name="city" id="city" lay-verify="required" lay-search=""><option value="">请选择城市</option></select></div></div><div class="layui-form-item"><label class="layui-form-label">区县:</label><div class="layui-input-block"><select class="custom-select"  name="county" id="county" lay-verify="required" lay-search=""><option value="">请选择区县</option></select></div></div></div>

5.通过ajax获取从后端获取数据 

 /// 使用jQuery的$.ajax方法$.ajax({url: ctx + 'zhWeather/getCity', // 你要请求的URLtype: 'GET', // 请求方式,GET或POSTdataType: 'json', // 预期服务器返回的数据类型data: { // 发送到服务器的数据},success: function(data) {loadData(JSON.stringify(data.data))// 请求成功时执行的回调函数console.log(data); // 处理返回的数据},error: function(xhr, status, error) {// 请求失败时执行的回调函数console.error("请求失败: " + error);}});

6.通过监听事件,完成Html省市区联动 

 //select2搜索下拉列表样式$('.custom-select').select2({placeholder: '请选择',allowClear: true});// 假设这是从Ajax请求中获取的,因此我们将其放入一个函数中function loadData(data) {data = JSON.parse(data)// 填充省份$.each(data, function(index, province) {$('#province').append($('<option>', {value: province.code,text: province.province}));});// 省份选择变化时,填充城市$('#province').change(function() {var selectedProvinceCode = $(this).val();var cityOptions = '';$.each(data, function(index, province) {if (province.code === selectedProvinceCode) {$.each(province.citys, function(index, city) {cityOptions += '<option value="' + city.code + '">' + city.city + '</option>';});}});$('#city').html('<option value="">请选择城市</option>' + cityOptions);$('#county').html('<option value="">请选择区县</option>'); // 清除区县选项});// 城市选择变化时,填充区县(这里省略,逻辑与填充城市类似)$('#city').change(function() {var selectedCityCode = $(this).val();var countyOptions = '<option value="">请选择区县</option>';var currentProvinceCode = $('#province').val(); // 获取当前选中的省份代码// 遍历data数组找到对应的省份和城市$.each(data, function(index, province) {if (province.code === currentProvinceCode) {$.each(province.citys, function(index, city) {if (city.code === selectedCityCode) {// 找到对应的城市后,遍历其区县$.each(city.areas, function(index, area) {countyOptions += '<option value="' + area.code + '">' + area.area + '</option>';});// 一旦找到匹配的城市,就跳出内层循环return false;}});// 一旦找到匹配的省份,也跳出外层循环(可选,但在这个场景下可能不是必需的)// return false;}});$('#county').html(countyOptions);});// 初始化时选择一个省份(可选)$('#province').val(data[0].code).trigger('change');}

7.实现效果

我会把项目绑定到博文资源文件,希望能够帮助到大家。谢谢

相关文章:

Html实现全国省市区三级联动

目录 前言 1.全国省市区的Json数据 2.找到Json数据文件(在此博文绑定资源)之后&#xff0c;放到resource目录下。 3.通过类加载器加载资源文件&#xff0c;读取Json文件 3.1 创建JsonLoader类 3.2 注入JsonLoader实体&#xff0c;解析Json文件 4.构建前端Html页面 5.通过…...

前端构建工具Webpack 与 Vite 大对比

在现代前端开发领域&#xff0c;构建工具扮演着至关重要的角色。它们不仅可以帮助我们管理项目依赖关系&#xff0c;还可以优化我们的代码&#xff0c;使其在生产环境中运行得更快更高效。其中两个最受欢迎的构建工具就是 Webpack 和 Vite。在这篇文章中&#xff0c;我们将深入…...

Ubuntu-22.04环境搭建

安装wget(一般ubuntu会自带) sudo apt-get install wget 更换国内软件源 先备份原来的/etc/apt/source.list⽂件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 防止修改错误 导致无可挽回 将下列国内镜像源 写入原来的/etc/apt/source.list⽂件&#xff08;注…...

嵌入式学习---DAY17:共用体与位运算

链表剩余的一些内容 一、共用体 union 共用体名 名称首字母大写 { 成员表列&#xff1b; }&#xff1b; union Demo {int i;short s;char c; }; int main(void) {union Demo d;d.i 10;d.s 100;d.c 200;printf("%d\n", sizeof(d)); /…...

蓝牙网关和蓝牙MESH总结

可参考&#xff1a; https://zhuanlan.zhihu.com/p/695144946 蓝牙网关 参考&#xff1a; https://www.bilibili.com/read/cv28872282/ 蓝牙网关是一种特殊的网络设备&#xff0c;它能够实现蓝牙设备与互联网或其他类型网络之间的数据传输和通信。通过蓝牙网关&#xff0c;用户…...

了解关于标准化的知识

1.标准化组织 1.1国家标准化管理委员会(Standardization Administration of the Peoples Republic of China&#xff0c;简称SAC) TC--(Technical Committee) 技术委员会. SAC/TC,就是“国家标准化管理委员会”下属的一个专项或一个行业的“技术委员会或技术小组”&a…...

【云原生】数据库忘记密码怎么办?

相信很多人都会遇到在虚拟机中忘记数据库密码的情况&#xff0c;想必大家都很苦恼&#xff0c;所以今天给大家来讲讲数据库忘记密码了如何修改密码再登录数据库&#xff01;&#xff01;&#xff01; 1、关闭数据库服务 systemctl stop mariadb 2、执行MySQL 服务器在启动时跳…...

Postman 接口测试详解

Postman 接口测试详解 Postman 接口测试详解1. Postman 基础知识1.1 什么是 Postman&#xff1f;1.2 Postman 的主要功能 2. 安装与设置2.1 安装 Postman2.2 创建 Postman 账户 3. Postman 的基本操作3.1 创建和发送请求3.2 解析响应数据3.3 使用环境和变量 4. 进阶功能4.1 编写…...

【JavaEE】线程状态

目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态&#xff08;WAITING) 4.超时等待&#xff08;TIMED_WAITING) 5.阻塞状态&#xff08;BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结 前言 线程状态及其状态转换…...

C++笔记之编译过程和面向对象

回顾&#xff1a; “abcd”//数据类型 字符串常量 const char *p"abc"; new STU const char *//8 指针的内存空间 int float 指针的内存空间 p 指针指向的内存空间 "abc" 取决于字符串长度 指针变量的内容一级指针 指针变量的地址二级指针 …...

ModuleNotFoundError: No module named ‘tqdm‘

报错信息&#xff1a; tqdm是一个快速、可扩展的Python进度条库&#xff0c;用于展示迭代器的长循环执行进度。 解决&#xff1a;通过以下命令安装 使用conda命令安装 conda install tqdm使用pip安装&#xff1a; pip install tqdm...

东京电影节公布2024年竞赛片评审团成员并对其业绩分别进行评介 没什么含金量

第37届东京国际电影节竞赛单元评审团名单正式公布。 周五&#xff0c;电影节组织者宣布&#xff0c;香港电影制片人杜琪峰、匈牙利电影制片人伊尔迪科恩耶迪、日本女演员桥本爱和法国女演员基娅拉马斯楚安尼将与之前宣布的评审团主席梁朝伟一起担任 2024 年主竞赛评审团成员。 …...

智能景区垃圾识别系统:基于YOLO的深度学习实现

基于深度学习的景区垃圾识别系统&#xff08;UI界面YOLOv8/v7/v6/v5代码训练数据集&#xff09; 1. 引言 景区垃圾识别是环保管理的重要任务之一。传统的人工清理方式效率低、成本高&#xff0c;而借助深度学习技术可以实现自动化的垃圾检测与识别&#xff0c;提高景区的清洁…...

ventoy和微pe可以共存吗?ventoy和pe共存使用教程

Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘&#xff0c;插入U盘安装写入就能制作成可引导的…...

如何获取和安装SSL证书

SSL&#xff08;Secure Sockets Layer&#xff09;证书是用于加密网站服务器和客户端之间通信的一种数字证书。它通过HTTPS协议保护数据传输的安全性&#xff0c;防止数据被窃听或篡改。本文将指导您如何为您的网站获取并安装SSL证书。 步骤1&#xff1a;选择SSL证书提供商 首…...

makefile在IC设计中的使用笔记

1 makefile在IC设计中的地位 关于makefile的详细介绍可以参考第一个连接&#xff0c;里面的内容很多也很详细。但在数字IC设计中&#xff0c;并不会把所有的用法都用到&#xff0c;下面记录一下主要用到的规则。 2 IC设计涉及到的主要用法 2.1 变量的定义和使用 在makefile…...

Suno声称在受版权保护的音乐上训练模型属于“合理使用“

继美国唱片业协会&#xff08;RIAA&#xff09; 最近对音乐生成初创公司 Udio 和 Suno 提起诉讼之后&#xff0c;Suno 在周四提交的一份法庭文件中承认&#xff0c;该公司确实使用了受版权保护的歌曲来训练其人工智能模型。但它声称&#xff0c;根据合理使用原则&#xff0c;这…...

Java | Leetcode Java题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution {public String removeDuplicateLetters(String s) {boolean[] vis new boolean[26];int[] num new int[26];for (int i 0; i < s.length(); i) {num[s.charAt(i) - a];}StringBuffer sb new StringBuffer();for (in…...

Taro学习记录

一、安装taro-cli 二、项目文件 三、项目搭建 1、Eslint配置 在项目生成的 .eslintrc 中进行配置 {"extends": ["taro/react"], //一个配置文件&#xff0c;可以被基础配置中的已启用的规则继承"parser": "babel/eslint-parser…...

Spring Cache框架详解

Spring Cache框架详解 Spring Cache是Spring框架提供的一个强大的缓存抽象层&#xff0c;旨在简化缓存技术的集成和使用。自Spring 3.1版本开始&#xff0c;Spring Cache就被引入以支持在Spring应用程序中添加缓存功能。随着Spring版本的迭代&#xff0c;Spring Cache的功能日…...

Linux下用qemu-nbd挂载qcow2镜像的完整指南(含LVM/非LVM/ntfs场景)

Linux下用qemu-nbd挂载qcow2镜像的完整指南&#xff08;含LVM/非LVM/ntfs场景&#xff09; 当虚拟机突然崩溃或需要从镜像中提取关键数据时&#xff0c;直接挂载qcow2镜像往往是最直接的解决方案。不同于常规磁盘挂载&#xff0c;qcow2镜像可能包含复杂的存储结构——从简单的e…...

5步解锁d2s-editor:暗黑2玩家的单机存档定制工具

5步解锁d2s-editor&#xff1a;暗黑2玩家的单机存档定制工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Vue.js构建的暗黑破坏神2存档编辑工具&#xff0c;专为单机玩家设计&#xff0c;提供角色属性修…...

终极Illusion游戏Mod管理指南:用KKManager告别插件混乱

终极Illusion游戏Mod管理指南&#xff1a;用KKManager告别插件混乱 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager 你是否曾经因为Mod冲突导致游戏崩溃而烦恼…...

解锁Online3DViewer:浏览器端3D模型可视化的核心价值与实践指南

解锁Online3DViewer&#xff1a;浏览器端3D模型可视化的核心价值与实践指南 【免费下载链接】Online3DViewer A solution to visualize and explore 3D models in your browser. 项目地址: https://gitcode.com/gh_mirrors/on/Online3DViewer 在数字化设计与开发领域&am…...

从像素到对象:如何用HANet和SNUNet搞定遥感影像中的‘小目标’与‘不平衡’难题?

从像素到对象&#xff1a;HANet与SNUNet在遥感影像小目标检测中的实战解析 当洪水退去后的灾损评估卫星图上&#xff0c;那些被冲毁的农舍屋顶往往只占据几个像素&#xff1b;在城市违建监测中&#xff0c;新增的违章建筑可能只是高分辨率影像中的微小色块。这些"小目标&q…...

从抓包到反编译:wx小程序逆向实战全记录(含云函数分析)

从抓包到反编译&#xff1a;小程序逆向工程深度解析与技术实践 在移动互联网时代&#xff0c;小程序以其轻量化和便捷性迅速占领市场&#xff0c;而作为开发者&#xff0c;理解小程序背后的运行机制不仅能提升开发能力&#xff0c;更能帮助进行安全审计和性能优化。本文将带您深…...

手把手教你给RK3588开发板添加RTL8188EUS USB无线网卡驱动(附完整配置流程)

RK3588开发板实战&#xff1a;RTL8188EUS无线网卡驱动移植全指南 在嵌入式开发领域&#xff0c;为特定硬件平台添加第三方外设驱动是开发者常遇到的挑战。本文将详细介绍如何在Rockchip RK3588开发板上为RTL8188EUS USB无线网卡移植驱动&#xff0c;从环境准备到功能验证&#…...

探索 COMSOL 三维多孔介质建模的魅力

comsol三维多孔介质 COMSOL三维多孔介质。 1.孔隙率孔径可控 2.一键区分固相孔相&#xff0c;简单方便 3.可设置五种粒径不同&#xff0c;含量不同的颗粒。嘿&#xff0c;各位科研和工程领域的小伙伴们&#xff01;今天咱们来聊聊 COMSOL 里的三维多孔介质建模&#xff0c;这玩…...

终极GitHub加速指南:3分钟让你的下载速度飙升100倍

终极GitHub加速指南&#xff1a;3分钟让你的下载速度飙升100倍 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub GitHub作为全球最大…...

长期跳健身操,颈椎会过度屈伸损伤吗

健身爱好者长期跳健身操、跟随节奏做颈部屈伸动作&#xff0c;是运动核心场景&#xff0c;却不知长期如此会让颈 “过度屈伸”&#xff0c;积累屈伸与爆发发力复合损伤。健身操中部分动作要求颈部快速屈伸、左右摆动&#xff0c;爆发性发力导致颈部肌肉与韧带承受瞬间张力&…...