当前位置:首页 > 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实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…