省市区三级联动(附加代码)

写在开头

上期代码主要实现手风琴效果,开发久了很多功能都是通过框架组件库来完成,但是如果组件满足不了开发需求,还需要开发人员手动封装组件,专门出这样一期文章,通过原生js实现一些特定功能,功能也比较简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript,在前端中的作用,另外也培养下我们的代码思维,那我们本次就通过由简单到复杂循序渐进,后续专栏中我们会带领大家用前端实现视频网站中重磅推荐模块、图片放大镜、积分抽奖、拼图、无缝轮播图、图片瀑布流、读心术小游戏等等有趣的小功能,纯前端语言实现,都会陆续带给大家。

功能介绍

类似省市区三级联动选择效果,可参考Vant组件库 Area 省市区选择

页面创建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./demo.css">
</head>
<body>
    <ul class="container">
        <li class="item">
            <div class="left">省份</div>
            <div class="right">
                <select name="province" id="province">
                    <option value="000">请选择</option>
                </select>
            </div>
        </li>
        <li class="item">
            <div class="left">城市</div>
            <div class="right">
                <select name="city" id="city">
                    <option value="000">请选择</option>
                </select>
            </div>
        </li>
        <li class="item">
            <div class="left">院校</div>
            <div class="right">
                <select name="school" id="school">
                    <option value="000">请选择</option>
                </select>
            </div>
        </li>
    </ul>
    <script src="../AllSchool.js"></script>
    <script src="./demo.js"></script>
</body>
</html>

样式创建

*{
    padding: 0;
    margin: 0;
    list-style: none;
}
body{
    background-color: bisque;
}

.container {
    width: 300px;
    margin: 0 auto;
}
.item{
    width: 100%;
    height: 42px;
    background-color: #fff;
    border-radius: 15px;
    margin-bottom: 15px;
}
.left{
    display: inline-block;
    height: 42px;
    line-height: 42px;
    margin: 0 10px;
    color:rgba(73, 74, 74, 0.514);
}
.left::after{
    content: '|';
    display: inline-block;
    color: rgba(73, 74, 74, 0.514);
    padding-left: 15px;
    font-weight: 500;
}
.right{
    display: inline-block;
    height: 42px;
    width: 210px;
    color: rgb(31, 31, 31);
}
select{
    width: 100%;
    height: 30px;
    /* 透明 */
    border-color: transparent;
}

逻辑实现

// 页面初始化

//获取操作dom
let provinceDom = document.getElementById('province');
let cityDom = document.getElementById('city');
let schoolDom = document.getElementById('school');

// 渲染省份列表
for (const prop in province) {
    if (Object.hasOwnProperty.call(province, prop)) {
        let optionDom = document.createElement('option')
        const element = province[prop];
        optionDom.value = prop;
        optionDom.innerText = element;
        provinceDom.appendChild(optionDom);
        
    }
}

// 省份变化的时候,获取省份编号

provinceDom.onchange = function(){
    // 每次选择先清空之前内容
    cityDom.innerText = '';
    // 获得省份编号
    let numPro = provinceDom.value;
    // 通过省标号,获取城市信息
    let citys = city[numPro]
    // 遍历渲染城市信息
    for (const cit in citys) {
        if (Object.hasOwnProperty.call(citys, cit)) {
            let options = document.createElement('option')
            const element = citys[cit];
            options.value = cit;
            options.innerText = element;
            cityDom.appendChild(options); 
        }
    }
    //默认值,选中城市后,学院及时展示出来
    let num = cityDom.value;//城市编号
    let univer = allschool[num]
    // 遍历
    for (let index = 0; index < univer.length; index++) {
        const element = univer[index];
        let options = document.createElement('option')
        options.innerText = element;
        schoolDom.appendChild(options);
    }

    
}

// 城市变化的时候,获取城市编号
cityDom.onchange = function () {
    // 每次选择先清空之前内容
    schoolDom.innerText = '';
    // 获得城市编号
    let numCity = cityDom.value;
    // 通过城市编号,获得学院信息
    let schools = allschool[numCity];
    // 遍历渲染院校信息
    for (const scho in schools) {
        if (Object.hasOwnProperty.call(schools, scho)) {
            const element = schools[scho];
            let optSchool = document.createElement('option')
            optSchool.value = scho;
            optSchool.innerText = element;
            schoolDom.appendChild(optSchool);
        }
    }
}

结尾总结

1.HTML部分写出省选择框,样式调整好之后,CV直接把城市学校选择直接完成
2.页面,样式画好之后开始写js部分
3.js部分先把整体要做什么想好,把整体框架先想好

  • 页面初始化
  • 渲染省份列表
  • 选好省份,展示city
  • 选好city,展示院校
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值