仿select 模拟一个下拉框

话不多说 直接上代码

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

<head>
    <meta charset="UTF-8">
    <title>JS模拟select下拉菜单</title>
    <style>
        body {
            font-size: 15px;
            
        }

        em {
            font-style: normal;
        }

        ul {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        
        .box-one{
            display: flex;
        }
        .box-two{
            display: flex;
        }
        .box {
            position: relative;
            margin: 10px 10px;
        }
         

        .select {
            display: inline-block;
            border: 1px solid #ccc;
            padding: 5px;
            width: 270px;
            cursor: pointer;
        }

        .arrow {
            color: #888;
            position: relative;
            left: -25px;
        }

        .sub {
            display: none;
            border: 1px solid #ccc;
            border-top: none;
            border-bottom: none;
            width: 270px;
        }

        .sub li {
            border-bottom: 1px solid #ccc;
            padding: 5px;
            cursor: pointer;
        }

        .sub li:hover,
        .sub li.hover {
            background: #eee;
        }
    </style>
</head>

<body>
    <h3>JS模拟selec下拉菜单</h3>
    <div class="box-one">
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub" style="display: none;">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub" style="display: none;">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
    </div>
    <div class="box-two">
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub" style="display: none;">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub" style="display: none;">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
        <div class="box">
            <span class="select">请选择下拉列表项</span><em class="arrow">▼</em>
            <ul class="sub" style="display: none;">
                <li>项目1</li>
                <li>项目2</li>
                <li>项目3</li>
            </ul>
        </div>
    </div>
    <script>
        window.onload = function () {

            var oBox = document.getElementsByClassName('box');
            var oSel = document.getElementsByClassName('select');
            var oSub = document.getElementsByTagName('ul');
            var oEm = document.getElementsByTagName('em');
            var aLi = document.getElementsByTagName("li")

            document.onclick = function () {
                for (let i = 0; i < oSub.length; i++) {
                    oSub[i].style.display = "none"
                }
                document.getElementsByClassName(".sub").style.display = "none"
            }
            // 点击显示隐藏下拉列表
            for (let i = 0; i < oSel.length; i++) {
                oSel[i].onclick = function (ev) {
                    var oEvent = ev || event;

                    if (oSub[i].style.display == 'block') {
                        oEm[i].innerHTML = "▼";
                        // alert(oEm.innerHTML);
                        oSub[i].style.display = 'none';
                    } else {
                        oEm[i].innerHTML = "▲";
                        oSub[i].style.display = 'block';
                    }
                    // 阻止默认事件
                    oEvent.cancelBubble = true;
                };
            }



            // 循环遍历所有li,为每个li添加相应事件
            for (let i = 0; i < aLi.length; i++) {
                // 鼠标移入,给li添加hover类
                aLi[i].onmouseover = function () {
                    this.className = 'hover';
                };

                // 鼠标移出,移出li的class
                aLi[i].onmouseout = function () {
                    this.className = '';
                };

                // 点击li,将oSel的内容替换成当前li的值
                aLi[i].onclick = function () {
                    if (i < 3) {
                        oEm[0].innerHTML = "▼";
                        oSel[0].innerHTML = this.innerHTML;
                    }
                    if (i >= 3 && i < 6) {
                        oEm[1].innerHTML = "▼";
                        oSel[1].innerHTML = this.innerHTML;
                    }
                    if (i >= 6 && i < 9) {
                        oEm[2].innerHTML = "▼";
                        oSel[2].innerHTML = this.innerHTML;
                    }
                    if (i >= 9 && i < 12) {
                        oEm[3].innerHTML = "▼";
                        oSel[3].innerHTML = this.innerHTML;
                    }
                    if (i >= 12 && i < 15) {
                        oEm[4].innerHTML = "▼";
                        oSel[4].innerHTML = this.innerHTML;
                    }
                    if (i >= 15 && i < 18) {
                        oEm[5].innerHTML = "▼";
                        oSel[5].innerHTML = this.innerHTML;
                    }
                };
            }
        };
    </script>
</body>

</html> -->


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

<head>
<meta charset="UTF-8">
<title>JS模拟select下拉菜单</title>
<style>
  body {
   font-size: 15px;
   /* display: flex; */
  }

  em {
   font-style: normal;
  }

  ul {
   padding: 0;
   margin: 0;
   list-style: none;
  }

  .box {
   position: relative;
  }
  .box-one,.box-two{
   display: flex;
  }

  .select {
   display: inline-block;
   border: 1px solid #ccc;
   padding: 5px;
   width: 270px;
   cursor: pointer;
  }

  .arrow {
   color: #888;
   position: relative;
   left: -25px;
  }

  .sub {
   display: none;
   border: 1px solid #ccc;
   border-top: none;
   border-bottom: none;
   width: 270px;
  }

  .sub li {
   border-bottom: 1px solid #ccc;
   padding: 5px;
   cursor: pointer;
  }

  .sub li:hover,
  .sub li.hover {
   background: #eee;
  }
</style>
</head>

<body>
<!-- <h3>JS模拟selec下拉菜单</h3> -->
<div class="box-one">
<div class="box">
  <span class="select">请选择下拉列表项1</span><em class="arrow">▼</em>
  <ul class="sub">
   <li>项目1-1</li>
   <li>项目2-1</li>
   <li>项目3-1</li>
  </ul>
</div>
<div class="box">
  <span class="select">请选择下拉列表项2</span><em class="arrow">▼</em>
  <ul class="sub">
   <li>项目1-2</li>
   <li>项目2-2</li>
   <li>项目3-2</li>
  </ul>
</div>
<div class="box">
  <span class="select">请选择下拉列表项3</span><em class="arrow">▼</em>
  <ul class="sub">
   <li>项目1-3</li>
   <li>项目2-3</li>
   <li>项目3-3</li>
  </ul>
</div>
</div>

<div class="box-two">
<div class="box">
  <span class="select">请选择下拉列表项4</span><em class="arrow">▼</em>
  <ul class="sub">
   <li>项目1-4</li>
   <li>项目2-4</li>
   <li>项目3-4</li>
  </ul>
</div>
<div class="box">
  <span class="select">请选择下拉列表项5</span><em class="arrow">▼</em>
  <ul class="sub">
   <li>项目1-5</li>
   <li>项目2-5</li>
   <li>项目3-5</li>
  </ul>
</div>
<div class="box">  
    <span class="select">请选择下拉列表项6</span><em class="arrow">▼</em>
    <ul class="sub">
     <li>项目1-6</li>
     <li>项目2-6</li>
     <li>项目3-6</li>
    </ul>
   </div>
<script>
var oBox = document.getElementsByClassName('box');
var oSel = document.getElementsByClassName('select');
var oSub = document.getElementsByTagName('ul');
var oEm = document.getElementsByTagName('em');
var aLi = document.getElementsByTagName("li")
//点击任意空白处收起所有下拉框,并且复位三角
document.onclick= function(){
    for(let i =0;i<oSub.length;i++){
        oSub[i].style.display = "none"
        oEm[i].innerHTML = "▼";
        }
    }
// 遍历所有oSel
for (let i = 0; i < oSel.length; i++) {
    //根据遍历判断点击的哪个oSel下拉框
  oSel[i].onclick = function (ev) {
    var oEvent = ev || event;
    //排他效果让点击的元素显示隐藏
    for (let i = 0; i < oSel.length; i++){
    oEm[i].innerHTML = "▼";
    oSub[i].style.display = 'none';
    }
    oEm[i].innerHTML = "▲";
    oSub[i].style.display = 'block';


    // 阻止默认事件
    oEvent.cancelBubble = true;

    // 遍历li
    for(let k = 0;k<aLi.length;k++){
    // 鼠标移入,给li添加hover类
    aLi[k].onmouseover = function () {
        this.className = 'hover';
    };
    // 鼠标移出,移出li的class
    aLi[k].onmouseout = function () {
        this.className = '';
    };
    //点击li
    aLi[k].onclick = function () {
        //打印出当前点击的是哪个下拉框和内容
        console.log('当前是',oSel[i],this.innerHTML);
        // console.log(111);
        //把对应的li内容赋值到对应的下拉框
        oSel[i].innerHTML = aLi[k].innerHTML;
        oEm[i].innerHTML = "▼";
        // alert(oEm.innerHTML);
        oSub[i].style.display = 'none';
    }
    }
  };
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值