zoukankan      html  css  js  c++  java
  • jquery-实现省市区地址选择器三级联动

    本文将阐述如何使用jquery框架解析复杂json数据(把数据中属于直辖市或特别行政区进行处理,格式化数据),并渲染到页面

    案例效果图如下:

    所有地址信息文件:http://59.110.140.61/file/city.json请自行下载。

    格式化前的数据为(需要将直辖市和特别行政区分离出来):

     

    格式化后的数据为:

     

    具体实现代码如下所示:

    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <style>
    </style>
    <body>
        <select name="" id="province">

        </select>
        <select name="" id="city">
            <option value="">请选择</option>
        </select>
        <select name="" id="town">
            <option value="">请选择</option>
        </select>
    </body>
    <script src="./jquery.min.js"></script>
    <script>
        $.ajax({
            url: './city.json',
            success: res => {
                var str = '<option value="">请选择</option>';
                res = formatData(res.list);
                res.forEach(({city_id,name}) => {
                    str += `<option value="${city_id}" class='active'>${name}</option>`;
                })
                $('#province').append(str);
                $('#province').change(function(){
                    $('#city').empty();
                    $('#city').append('<option value="">请选择</option>');
                    $('#town').empty();
                    $('#town').append('<option value="">请选择</option>');
                    if(!$('#province').val()){
                        return;
                    }
                    var city_id = $(this).val();
                    selectCity(res,city_id);
                })

            }
        })
        function selectCity(res,city_id){
            var cityList = res.filter(item=>{
                if(item.city_id == city_id){
                    return item;
                }
            })[0].list;
            var str = '<option value="">请选择</option>';
            cityList.forEach(({city_id,name})=>{
                str += `<option value="${city_id}">${name}</option>`;
            })
            $('#city').empty();
            $('#city').append(str);
            $('#city').change(function(){
                var city_id = $(this).val();
                selectX(cityList,city_id);
            })
        }
        function selectX(cityList,city_id){
            var xListn = cityList.filter(item=>{
                if(item.city_id == city_id){
                    return item;
                }
            })[0].list;
            console.log(xListn);
            var str = '<option value="">请选择</option>';
            xListn.forEach(({city_id,name})=>{
                str += `<option value="${city_id}">${name}</option>`;
            })
            $('#town').empty();
            $('#town').append(str);
        }


        function formatData(res) {
            var a = [];
            for (var i = 0; i < 4; i++) {
                a.push(res.shift());
            }
            var b = [];
            var arr = res.filter(item => {
                if (item.name == '香港' || item.name == '澳门') {
                    b.push(item);
                } else {
                    return item;
                }
            })
            arr.unshift({
                name: '直辖市',
                city_id: 'CH99',
                list: a
            }, {
                name: '特别行政区',
                city_id: 'CH98',
                list: b
            });
            return arr;
        }
    </script>
    </html>
     
  • 相关阅读:
    jquery tmpl 模板引擎 取小数点 三目运算
    ztree 根据id选中某一点且触发当前点的click事件
    rgb(123,25,62)拆分
    html5 vedio
    同一个dom上加单击事件和双击事件的冲突解决办法,双击事件方法进不去
    axios拦截器
    foreach、for、for in循环方式
    echarts markline 不同颜色
    组件里传值到父级
    vue路由钩子拦截器beforeEach和afterEach及页面路由变化路由监听
  • 原文地址:https://www.cnblogs.com/piaoyi1997/p/13215408.html
Copyright © 2011-2022 走看看