最近用到mint-ui的Picker, 做省市区/县联动,需要传入对应的数组,鉴于网上对于区/县一级信息较少,且数据结构不方便做查询,所以自己整理了一版。
省市区/县 信息来自政府网站行政区划,有兴趣的朋友可以自己查看一下。
因为上面数据比较杂乱,一个个复制麻烦,所以写了段代码,把数据爬出来。
var str = '{\n\t'
$('.cate ul').each(function (index, item) {
if (index === 0) {
str += '\''+ $(item).find('span').text() + '\':'+' '+'['
} else {
var arr = []
$(item).find('li').each(function (index, item) {
if (index === 0) {
str += '{\'' + $(item).find('a').text() + '\':'+' '
} else {
if (index === 1) {
str += '[\'' + $(item).find('a').text() + '\','+' '
} else {
if ($(item).find('a').text() !== '') {
str += '\'' + $(item).find('a').text() + '\','+' '
}
}
}
})
str += ']},'
}
})
str += ']},'
console.log(str)
不是很完整,也不是绝对自动化,因为他们网站重点内容的类名也不一样,就半自动半手动吧
数据格式:
addr = [
{
'吉林省': [
{'长春市': ['南关区', '宽城区', '朝阳区', '二道区', '绿园区', '双阳区', '九台区', '农安县', '榆树市', '德惠市']
},
{...}
}
]
数据比较多,放在github传送门
查询方法:
/**
* 查询省市区/县数组
* @param {string} province [省]
* @param {string} city [市]
* @param {string} arr [省市区/县字典]
* @使用方法:
* 1. 查询省列表 PCA_select('', '', addr)
* 2. 查询省下市列表 PCA_select(province, '', addr)
* 3. 查询某市下县/区列表 PCA_select(province, city, addr)
*/
function PCA_select (province, city, arr) {
if (city === '') {
if (province === '') {
// @TODO 求省数组
var provinceArr = []
} else {
// @TODO 求province省下的所有市
var cityArr = []
}
} else {
// @TODO 求province下,city下的区/县
var areaArr = []
}
arr.forEach(function (item, index, array) {
for (var pro in item) {
if (provinceArr instanceof Array) {
provinceArr.push(pro)
} else {
// @TODO 查询市或者区/县
if (pro === province) {
item[pro].forEach(function (item, index, array) {
for (var cit in item) {
if (cityArr instanceof Array) {
cityArr.push(cit)
} else {
if (cit === city) {
if (areaArr instanceof Array) {
areaArr = item[cit]
}
}
}
}
})
}
}
}
})
return provinceArr || cityArr || areaArr
}
console.log(PCA_select('', '', addr))