Js四级联动(下拉框选择地区)

天大地大妈咪最大 提交于 2019-12-21 17:15:14

数据与视图

如何根据数据渲染视图思路?

1:了解已知的数据接结构
2: 知到你要的数据是什么
3: 知道你的页面结构是什么?
4: 想办法拿到你想要的数据;方式有:数组对象的遍历;数组内置API 字符拼API 字符串变数组;数组变字符串,等基本操作。
5:看数据获取到的数据与你搭建的页面结构是否符合?
6:让你获取的数据与你搭建的页面结构相吻合。想办法:处理数据或者调整html结构 实现样式
7:将数据渲染到页面中

常见数据处理

1: 数组 对象遍历 增 删 改
2: 利用数组内置API
3: 字符串变数组;目的为了更好处理数据
4:数组变字符串。
5:字符串内置API

数据结构不符合时候,如何对数据进行重构?

1: 相同荣类型的数据用放在数组中;
2:有区别的数据放在对象中。区别为属性;
3:数据结构要符合页面htMl 结构

二级联动

1: 遍历1一级的内容
1.5 二级内容初始化。根据一级初始化数据 遍历二级内容
所有初始化只执行一次
2:根据用户选择的内容获取二级的数据

  • select.value
  • 方式二 select.options[select.options.selectedIndex];
  • 给一级select 绑定onchange 事件;每次内容改变时候;都获取用户选择内容
    3: 根据获取二级数据 二级内容;
    如何获取用户选择的一级内容

三级联动

0: 一级 二级 三级内容的初始化处理
0.1 根据数据渲染一级;有默认选项
0.2 根据1级默认选项渲染二级数据 有默认选项
0.3 根据二级默认选项 渲染三级数 有默认选项

1:根据数结构渲染一级内容
1.1 根据数据结构;获取一级内容中数据
1.5 根据一级数据渲染视图

2:根据一级选择内容渲染二级内容
2.1 给一级select 绑定onchange事件
2.2 获取每次一级内容发生改变收的数据 selet.value 或者select.options[select.options.selectedIndex];
2.3 根据获取一级用户选择的内容;获取二级数据
2.4 将二级数据渲染的页面中
2.5 同时需要根据二级默认选项获取三级数据并需要渲染到页面中
3:根据二级渲染三级数据
3.1 给二级select 绑定onchange 事件;
3.2 获取用户选择的二级内容
3.3 根据用户选择的二级内容 获取三级数据
3.4 将三级数据渲染到页面中

四级联动

0: 一级 二级 三级内容的初始化处理
0.1 根据数据渲染一级;有默认选项
0.2 根据1级默认选项渲染二级数据 有默认选项
0.3 根据二级默认选项 渲染三级数 有默认选项
0.4 根据三级三级默认选择;渲染四级数据

1:根据数结构渲染一级内容
1.1 根据数据结构;获取一级内容中数据
1.5 根据一级数据渲染视图

2:根据一级选择内容渲染二级内容
2.1 给一级select 绑定onchange事件
2.2 获取每次一级内容发生改变收的数据 selet.value 或者select.options[select.options.selectedIndex];
2.3 根据获取一级用户选择的内容;获取二级数据
2.4 将二级数据渲染的页面中
2.5 同时需要根据二级默认选项获取三级数据并需要渲染到页面中
2.6 同数渲染四级数据。
3:根据二级渲染三级数据
3.1 给二级select 绑定onchange 事件;
3.2 获取用户选择的二级内容
3.3 根据用户选择的二级内容 获取三级数据
3.4 将三级数据渲染到页面中
3.3 当选中二级时候;同时渲染四级数据。

4:根据三级获取四级

Js部分:

var province = document.getElementById("province");
    var city = document.getElementById("city");
    var district = document.getElementById("district");
    var street = document.getElementById("street");

    var provinceData = area;
    var cityData;
    var districtData;
    var streetData;

    // 获取所有的省 初始化省
    createOpt(province, provinceData);

    // 初始化市
    cityData = provinceData[province.value][0];
    createOpt(city, cityData);

    // 初始化 区
    districtData = cityData[city.value];
    for (var i = 0; i < districtData.length; i++) {
        createOpt(district, districtData[i]);
    }

    // 初始化 街道
    streetData = districtData[0][district.value];
    var streetArr = streetData.replace(/[" "]/g, "").split("、");
    createOpt(street, streetArr);

    // 点击省 改变市 区 街道
    province.onchange = function () {
        cityData = provinceData[province.value][0];
        // 清空 【市】 中 option 样式
        clearOpt(city);
        createOpt(city, cityData);

        // 改变 区
        changeDis();

        // 改变街道
        changeStr();
    }

    // 点击市 改变区 街道
    city.onchange = changeDis;
    // 点击区 改变街道
    district.onchange = changeStr;
    // 封装 创建 option
    // sel(select标签)  data(需要遍历的数据)
    function createOpt(sel, data) {
        // 如果data是对象
        if (data.constructor === Object) {
            for (var x in data) {
                var opt = document.createElement("option");
                opt.innerHTML = x;
                sel.appendChild(opt);
            }
        } else if (data.constructor === Array) {// 如果data是数组
            for (var i = 0; i < data.length; i++) {
                var opt = document.createElement("option");
                opt.innerHTML = data[i];
                sel.appendChild(opt);
            }
        }
    }

    // 封装清空的option 样式
    function clearOpt(sel) {
        var opts = sel.options;
        for (var i = 0; i < opts.length; i++) {
            sel.removeChild(opts[i]);
            --i;
        }
    }

    // 封装 改变 区 街道
    function changeDis() {
        // 先清 option 样式
        clearOpt(district);
        districtData = cityData[city.value];
        for (var i = 0; i < districtData.length; i++) {
            createOpt(district, districtData[i]);
        }
        changeStr();
    }

    function changeStr(){
        clearOpt(street);
        // 获取区的option 元素集合
        var disopts = district.options;
        // 获取option 元素 索引
        var districtIndex = disopts.selectedIndex;
        // 获取option 数据
        var strIndex = district.value;
        // 获取 街道
        streetData = districtData[districtIndex][strIndex];
        streetArr = streetData.replace(/[" "]/,"").split("、");
        createOpt(street,streetArr);
    }

div部分:

<select name="" id="province"></select>
  <select name="" id="city"></select>
   <select name="" id="district"></select>
   <select name="" id="street"></select>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!