三级城市联动的实现

数据:

// 城市列表
var data = [
  {
    "code": "110000",
    "name": "北京市",
    "parent": "100000",
    "children": [
      {
        "code": "110101",
        "name": "东城区",
        "parent": "110100",
        "children": null
      },
      {
        "code": "110102",
        "name": "西城区",
        "parent": "110100",
        "children": null
      },
      {
        "code": "110105",
        "name": "朝阳区",
        "parent": "110100",
        "children": [
          {
            "code": "11010501",
            "name": "朝阳区111",
            "parent": "110105",
            "children": null
          }
        ]

      },
    ]
  }
]

1.遍历省级数据

我们可以通过以下几步来遍历省级数据:
  1.导入数据
  2.在body标签创建三个下拉框
  3.分别获取这三个下拉框
  4.遍历数据
  5.添加到省级下拉框中

2.二级联动的实现

二级联动在遍历省级基础上又多了些步骤
具体实现步骤如下:
  1.创建一个数组,用于存放市级数据
  2.给省级下拉框绑定事件
  3.遍历数据,将遍历的数据与当前的省作比较,将相对应的市级数据存放到数组中
  4.遍历市级数据

注意: 在省级数据发生变化时,要清空市级的数据,不然市级的数据会叠加在一起,所以要加上这句:

shi.innerHTML="<option value=\"\">---请选择---</option>"

3.三级联动的实现

三级联动与二级联动的实现几乎一样,注意数据发生变化时所要清空相应的数据即可。

4.最终代码实现如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 1.导入数据 -->
    <script src="./area-json.js"></script>
  </head>
  <body>
    <!-- 2.在body标签创建三个下拉框 -->
    省:<select name="" id="sheng">
      <option value="">---请选择---</option>
    </select>
    市:<select name="" id="shi">
      <option value="">---请选择---</option>
    </select>
    区:<select name="" id="qu">
      <option value="">---请选择---</option>
    </select>
  </body>
  <script>
    // 3.分别获取这三个下拉框
    var sheng = document.getElementById('sheng')
    console.log(sheng)
    var shi = document.getElementById('shi')
    var qu = document.getElementById('qu')
    var frag = document.createDocumentFragment()
    console.log(frag)
    // 4.遍历数据

    for (var i = 0; i < data.length; i++) {
      console.log(data[i].name)
      var option = document.createElement('option')
      console.log(option)
      option.innerText = data[i].name
      option.value = data[i].code
      frag.appendChild(option)
    }
    // 5.添加到省级下拉框中
    sheng.appendChild(frag)

    // 1.创建一个数组,用于存放市级数据
    var shiArr = []
    // 2.给省级下拉框绑定事件,onchang(当省级数据变化时,触发该事件)
    sheng.onchange = function () {
      //清空市级与区级中的数据,防止重复
      shi.innerHTML = '<option value="">---请选择---</option>'
      qu.innerHTML = '<option value="">---请选择---</option>'
      // 3.遍历数据,将遍历的数据与当前的省作比较,将相对应的市级数据存放到数组中
      // 4.遍历数组,将数组中的数据添加到市级下拉框中
      for (var i = 0; i < data.length; i++) {
        // 判断当前省级下拉框的选中的值与数据中的code值是否相等
        if (data[i].code == this.value) {
          // 将市级数据存放到数组中
          shiArr = data[i].children
          // 遍历数组,将数组中的数据添加到市级下拉框中
          break
        }
      }
      // 4.遍历市级数据
      for (var j = 0; j < shiArr.length; j++) {
        var option = document.createElement('option')
        option.innerHTML = shiArr[j].name
        option.value = shiArr[j].code
        frag.appendChild(option)
      }
      shi.appendChild(frag)
    }
    var quArr = []
    shi.onchange = function () {
      qu.innerHTML = '<option value="">---请选择---</option>'
      for (var i = 0; i < shiArr.length; i++) {
        if (shiArr[i].code == this.value) {
          quArr = shiArr[i].children
          break
        }
      }
      for (var j = 0; j < quArr.length; j++) {
        var option = document.createElement('option')
        option.innerHTML = quArr[j].name
        option.value = quArr[j].code
        frag.appendChild(option)
      }
      qu.appendChild(frag)
    }
  </script>
</html>