<div class='addModal'>
<select class="form-select form-select-sm" name="province">
<option selected value="">--省--</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-select form-select-sm" name="city">
<option selected value="">--市--</option>
</select>
</div>
<div class="col-sm-3">
<select class="form-select form-select-sm" name="county">
<option selected value="">--县--</option>
</select>
</div>

省市区的三级联动,当点击省的时候,市会根据省中的值会自动获取匹配对应的市,选择市后会自动获取县一级.
let select1 = document.querySelector(`.addModal [name="province"]`)
axios({
method: 'get',
url: '/geo/province'
}).then(({ data: res }) => {
select1.innerHTML = `<option selected value="">--省--</option>` + res.map((item) =>
`<option value="${item}">${item}</option>`).join('')
//这里还可以用一个空数组将遍历的值存储起来,将字符串合并渲染到页面也能达到相同效果,如下所示
// let arr = ['<option value="">--省--</option>']
// res.forEach(item => {
// arr.push(`<option value="${item}">${item}</option>`)
// })
// arr.push(res.map((item)=>`<option selected value="${item}">${item}</option>`))
// console.log(arr)
// select1.innerHTML=arr.join('')
})
接下来处理市一级
let select2 = document.querySelector(`.addModal [name="city"]`)
select1.onchange = function () {
select3.innerHTML = `<option selected value="">--县--</option>`
if (select1.value == '') {
select2.innerHTML = `<option selected value="">--市--</option>`
return
}axios({
url: '/geo/city',
params: { pname: select1.value }
}).then(({ data: res }) => {
select2.innerHTML = `<option selected value="">--市--</option>` + res.map((item) =>
`<option value="${item}">${item}</option>`).join('')
})
}
let select3 = document.querySelector(`.addModal [name="county"]`)
select2.onchange = function () {
if (select2.value == '') {
select3.innerHTML = `<option selected value="">--县--</option>`
return
} axios({
url: '/geo/county',
params: {
pname: select1.value,
cname: select2.value
}
}).then(({ data: res }) => {
select3.innerHTML = `<option selected value="">--县--</option>` + res.map((item) =>
`<option value="${item}">${item}</option>`).join('')
})
}