当前位置:首页 > JavaScript

js实现省市

2026-03-15 08:33:13JavaScript

JavaScript 实现省市联动选择

数据结构准备

省市联动通常需要预先定义层级数据,可采用以下格式存储省市级联数据:

const provinceCityData = [
  {
    name: "北京市",
    cities: ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区"]
  },
  {
    name: "上海市",
    cities: ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区"]
  }
  // 其他省份数据...
]

HTML 结构

创建两个 select 元素分别用于选择省份和城市:

<select id="province"></select>
<select id="city"></select>

初始化省份列表

页面加载时填充省份选项:

const provinceSelect = document.getElementById('province');
provinceCityData.forEach(province => {
  const option = document.createElement('option');
  option.value = province.name;
  option.textContent = province.name;
  provinceSelect.appendChild(option);
});

城市联动更新

当省份选择变化时动态更新城市列表:

provinceSelect.addEventListener('change', function() {
  const citySelect = document.getElementById('city');
  citySelect.innerHTML = ''; // 清空现有城市

  const selectedProvince = provinceCityData.find(
    p => p.name === this.value
  );

  if (selectedProvince) {
    selectedProvince.cities.forEach(city => {
      const option = document.createElement('option');
      option.value = city;
      option.textContent = city;
      citySelect.appendChild(option);
    });
  }
});

完整实现示例

document.addEventListener('DOMContentLoaded', function() {
  const provinceSelect = document.getElementById('province');
  const citySelect = document.getElementById('city');

  // 初始化省份
  provinceCityData.forEach(province => {
    const option = new Option(province.name, province.name);
    provinceSelect.add(option);
  });

  // 省份变更事件
  provinceSelect.addEventListener('change', function() {
    citySelect.innerHTML = '<option value="">请选择城市</option>';
    const selectedProvince = provinceCityData.find(
      p => p.name === this.value
    );

    if (selectedProvince) {
      selectedProvince.cities.forEach(city => {
        citySelect.add(new Option(city, city));
      });
    }
  });

  // 触发初始加载
  provinceSelect.dispatchEvent(new Event('change'));
});

优化建议

  1. 使用 AJAX 动态加载数据可减少初始页面体积
  2. 添加默认提示选项如"请选择省份"
  3. 考虑使用第三方库如 jQuery 简化 DOM 操作
  4. 对大数据量省份可采用虚拟滚动优化性能

第三方库实现

使用 jQuery 的简化版本:

js实现省市

$('#province').change(function() {
  $('#city').empty();
  const cities = provinceCityData.find(p => p.name === $(this).val()).cities;
  $.each(cities, (i, city) => $('#city').append($('<option>').val(city).text(city)));
});

注意事项

  1. 确保数据完整性,包含所有省份和对应城市
  2. 移动端需考虑选择控件的用户体验
  3. 国际版需处理不同国家的行政区划差异
  4. 可结合 localStorage 缓存选择结果

标签: 省市js
分享给朋友:

相关文章

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…