省市县三级联动
JavaScript原生代码实现如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>省市县三级联动</title>
</head>
<style>
*{margin: 0;padding: 0;}
.city,.district{display: none;}
</style>
<body>
<div class="container">
省-市-区
<select class="province">
<option value="0">请选择省份</option>
</select>
<select class="city">
<option value="0">请选择城市</option>
</select>
<select class="district">
<option value="0">请选择区/县</option>
</select>
</div>
</body>
<script>
var arr = [{
provinceName: "河北省",
citys: [{
cityName: '石家庄市',
districts: [{
districtName: '桥东区'
}, {
districtName: '桥西区'
}, {
districtName: '桥北区'
}, {
districtName: '桥南区'
}]
}, {
cityName: '邢台市',
districts: [{
districtsName: '桥东区'
}, {
districtName: '桥西区'
}, {
districtName: '桥北区'
}, {
districtName: '桥南区'
}]
}, {
cityName: '邯郸市',
districts: [{
districtsName: '桥东区'
}, {
districtName: '桥西区'
}, {
districtName: '桥北区'
}, {
districtName: '桥南区'
}]
}, {
cityName: '沧州市',
districts: [{
districtsName: '桥东区'
}, {
districtName: '桥西区'
}, {
districtName: '桥北区'
}, {
districtName: '桥南区'
}]
}]
},
{
provinceName: "山东省",
citys: [{
cityName: '菏泽市',
districts: [{
districtName: '曹县'
}, {
districtName: '桥东区'
}, {
districtName: '桥西区'
}]
}, {
cityName: '青岛市',
districts: [{
districtName: '黄岛区'
}, {
districtName: '市南区'
}, {
districtName: '市北区'
}]
}, {
cityName: '德州市',
districts: [{
districtName: '德城区'
}, {
districtName: '陵县'
}, {
districtName: '平原县'
}]
}]
},
{
provinceName: "重庆市",
citys: [{
cityName: '重庆市',
districts: [{
districtName: '石柱县'
}, {
districtName: '渝中区'
}, {
districtName: '南岸区'
},{
districtName:'沙坪坝区'
}]
}]
}];
var province = document.getElementsByClassName("province")[0];
var city = document.getElementsByClassName('city')[0];
var district = document.getElementsByClassName('district')[0];
var provinceName = "";//用于存放省份的变量
for(var i=0;i<arr.length;i++){
var opt = document.createElement('option');
//创建指定文本的按钮你需要在按钮元素后添加文本节点
//语法:document.createElement(nodename)
opt.text=arr[i].provinceName;
province.add(opt,null);
//add() 方法用于向 <select> 添加一个 <option> 元素。
//语法:selectObject.add(option,before)
//option 必需。要添加选项元素。必需是 option 或 optgroup 元素。
//before 必需。在选项数组的该元素之前增加新的元素。如果该参数是null,元素添加到选项数组的末尾。
}
province.onchange = function(){
var cityOpt =document.createElement('option');
city.innerHTML='<option>-=请选择市=-</option>';
//获取省份下拉框选择的内容(省份下拉框的value值)
provinceName=province.value;
//显示市级下拉框
city.style.display="inline";
//从大数组中遍历省份,找到与省份对应的城市列表
for(var i=0;i<arr.length;i++){
//如果选中的省份与数组中的某一个相同,那么显示对应的城市列表
if(arr[i].provinceName==provinceName){
//设置变量cityArr用于存储市级列表
cityArr = arr[i].citys;
///遍历cityArr数组,向城市下拉框中添加option元素
for(var j=0;j<cityArr.length;j++){
var cityOpt =document.createElement('option');
cityOpt.text=cityArr[j].cityName;
city.add(cityOpt,null);
}
}
}
}
city.onchange = function(){
district.innerHTML='<option>请选择区县</option>'
var cityName=city.value;
district.style.display="inline";
for(var i=0;i<arr.length;i++){
if(arr[i].provinceName==provinceName){
for(var j=0;j<arr[i].citys.length;j++){
if(arr[i].citys[j].cityName==cityName){
//设置变量districtArr用于存储市级列表
//districtArr = arr[i].citys[j].districts;
//遍历数组
for(var k=0;k<arr[i].citys[j].districts.length;k++){
var districtOpt = document.createElement("option");
districtOpt.text=arr[i].citys[j].districts[k].districtName;
district.add(districtOpt,null);
}
}
}
}
}
}
</script>
</html>
运行结果如下: