js省市区三级联动

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			select {
				width: 20%;
				height: 25px;
				margin: 20px;
			}
		</style>
	</head>
	<body>
		<select class="prince" onchange="province(value
		)">
			<option class="prince">-请选择省-</option>
		</select>
		<select class="citys" onchange="town(value)">
			<option class="city" placeholder="请选择市">-请先选择省-</option>
		</select>
		<select class="countrys">
			<option class="country" placeholder="请选择县">-请先选择省-</option>
		</select>
		<script src="js/sanjld.js"></script>
	</body>
</html>
let xhr = new XMLHttpRequest();
xhr.open('get', 'js/sanjld.json', true);
xhr.send();
xhr.onreadystatechange = function() {
	if (xhr.readyState == 4 && xhr.status == 200) {
		let text = xhr.responseText;
		console.log(text);
		data = JSON.parse(text);
		console.log(data);
		item(data);

	}
};

// item(data) 函数:
//接收一个包含省份数据的数组 data 作为参数。
// 遍历数组中的省份数据,将每个省份的名称添加到一个字符串中,并生成对应的 option 标签。
// 将生成的字符串渲染到名为 prince 的 HTML 元素中。

// province(w) 函数:
// 接收一个表示选中省份索引的参数 w。
// 初始化城市和县的选择框内容为空。
// 遍历选中省份对应的城市数据,生成每个城市的 option 标签,并将其渲染到名为 citys 的 HTML 元素中。
// 同时将县的选择框内容设置为“请先选择县”。

// town(a) 函数:
// 接收一个表示选中城市索引的参数 a。
// 初始化县级选择框的内容为空。
// 遍历选中城市对应的县级数据,生成每个县的 option 标签,并将其渲染到名为 countrys 的 HTML 元素中。
// 获取到省市县的数据 let声明新的变量 在文档中通过类名获取数据
let prince = document.getElementsByClassName('prince')[0];
console.log(prince);
let citys = document.getElementsByClassName('citys')[0];
console.log(citys);
let countrys = document.getElementsByClassName('countrys')[0];
console.log(countrys);

function item(data) {
	console.log(data);
	// 初始化一个字符串 str,值为 "-请选择省-"
	let str = `<option class="city">-请选择省-</option>`;
	// 遍历数组
	for (let i = 0; i < data.length; i++) {
		console.log(data[i]);
		// 拼接第一个输入框内容,将数据中的省份名称添加到 str 中
		str += `
            <option value="${i}">${data[i].prince}</option>`;
	}
	// 渲染数据到名为 prince 的元素中
	prince.innerHTML = str;
};

// 市级数据渲染
function province(w) {
	console.log(w);
	// 初始化一个字符串 stre,值为 "-请选择市-"
	let stre = `<option class="city">-请选择市-</option>`;
	// 初始化一个字符串 sttrs,值为 "-请先选择县-"
	let sttrs = `<option class="country">-请先选择县-</option>`;
	// 遍历选中省份对应的城市数据
	for (let i = 0; i < data[w].citys.length; i++) {
		// 将城市信息添加到 stre 中作为 option 标签的值和文本
		stre += `<option value="${i}">${data[w].citys[i].city}</option>`;
		abc = data[w]; // 保存当前省份的数据
	}
	// 重新渲染城市选择框的数据
	citys.innerHTML = stre;
	// 重新渲染县级选择框的数据
	countrys.innerHTML = sttrs;
};
// 县级数据渲染
function town(a) {
	console.log(a);
	// 初始化一个字符串 sttrs,值为 "-请选择县-"
	let sttrs = `<option class="country">-请选择县-</option>`;
	// 遍历选中城市对应的县级数据
	for (let i = 0; i < abc.citys[a].conturys.length; i++) {
		// 将县级信息添加到 sttrs 中作为 option 标签的值和文本
		sttrs += `<option value="country">${abc.citys[a].conturys[i].contury}</option>`;
	}
	// 重新渲染县级选择框的数据
	countrys.innerHTML = sttrs;
};
[{
	"prince": "河南省",
	"citys": [{
		"city": "鹤壁市",
		"conturys": [{
			"contury": "淇滨区"
		}, {
			"contury": "浚县"
		}]
	}, {
		"city": "新乡市",
		"conturys": [{
			"contury": "红旗区"
		}, {
			"contury": "牧野区"
		}, {
			"contury": "卫滨区"
		}]
	}]
}, {
	"prince": "河北省",
	"citys": [{
		"city": "石家庄市",
		"conturys": [{
			"contury": "桥西区"
		}, {
			"contury": "新华区"
		}]
	}, {
		"city": "张家口市",
		"conturys": [{
			"contury": "万全区"
		}, {
			"contury": "下花园区"
		}, {
			"contury": "宣化区"
		}]
	}]
}]

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值