ul -- li 模拟select下拉框

Posted on 2019-07-29 14:39  嗷呜~  阅读(3664)  评论(0编辑  收藏  举报

在写项目中 用到下拉框,一般用

 <select name="" id="">
     <option value="">1</option>
     <option value="">2</option>
     <option value="">3</option>
 </select>

但是select 在不同的浏览器中 样式有些差别,所以用 ul  li 来模拟select 的功能。

 <div class="model-select-box">
      <div class="model-select-text" value=""> 请选择:</div>
      <b class="bg1"></b>
      <ul class="model-select-option">
        <li data-option="1" class="selected">查设备</li>
        <li data-option="2">查链路</li>
        <li data-option="3">查光缆</li>
      </ul>
    </div>
 $(function () {
      /*
       * 模拟网页中所有的下拉列表select
       */
      function selectModel() {
        var $box = $('div.model-select-box');
        var $option = $('ul.model-select-option', $box);
        var $txt = $('div.model-select-text', $box);
        var speed = 10;
        var $bg = $('b.bg1',$box)

        
        // 点击小三角
        $bg.click(function(){
          $option.not($(this).siblings('ul.model-select-option')).slideUp(speed, function () {
          });
          $(this).siblings('ul.model-select-option').slideToggle(speed, function () {
            // int($(this));
          });
          return false;
        })
        /*
         * 单击某个下拉列表时,显示当前下拉列表的下拉列表框
         * 并隐藏页面中其他下拉列表
         */
        $txt.click(function (e) {
          $option.not($(this).siblings('ul.model-select-option')).slideUp(speed, function () {
          });
          $(this).siblings('ul.model-select-option').slideToggle(speed, function () {
            // int($(this));
          });
          return false;
        });
        //点击选择,关闭其他下拉
        /*
         * 为每个下拉列表框中的选项设置默认选中标识 data-selected
         * 点击下拉列表框中的选项时,将选项的 data-option 属性的属性值赋给下拉列表的 data-value 属性,并改变默认选中标识 data-selected
         * 为选项添加 mouseover 事件
         */
          $option.find('li').each(function(index,element){
            // console.log($(this) + '1');
            if($(this).hasClass('selected')){
              $(this).parent('.model-select-option').siblings('.model-select-text').text($(this).text())
            }
            
            $(this).mousedown(function(){
              $(this).parent().siblings('div.model-select-text').text($(this).text())
              .attr('value', $(this).attr('data-option'));
                $option.slideUp(speed, function () {
                });
                $(this).addClass('selected').siblings('li').removeClass('selected');
                return false;
            })

            $(this).on('mouseover',function(){
              $(this).addClass('selected').siblings('li').removeClass('selected');
            })
          })
        //点击文档,隐藏所有下拉
        $(document).click(function (e) {
          $option.slideUp(speed, function () {
          });
        });
        
      }
    
      selectModel();
    })
* {
      margin: 0;
      padding: 0;
    }

  

    body {
      font: 14px '微软雅黑';
      color: #555;
      padding: 50px;
    }

    ul {
      list-style: none;
    }

    .model-select-box {
      width: 100px;
      height: 34px;
      line-height: 34px;
      border: 1px solid #000;
      float: left;
      margin-right: 20px;
      text-indent: 5px;
      position: relative;
      font-size: 18px;
      box-sizing: border-box
    }

    .model-select-text {
      height: 34px;
      padding-right: 27px;
      cursor: pointer;
      /* -moz-user-select: none;
      -webkit-user-select: none;
      user-select: none; */
    }

    .model-select-option {
      display: none;
      position: absolute;
      background: #fff;
      width: 100%;
      left: -1px;
      border: 1px solid #000;
    }

    .model-select-option li {
      height: 30px;
      line-height: 30px;
      color: #000;
      cursor: pointer;
    }

    .model-select-option li.selected {
      background: #06C;
      color: #fff;
    }

    /* 小三角 */
    .bg1{
    position: absolute;
    top:12px;
    right:5px;
    border-width: 6px;
    border-style: solid;
    border-color: #000 transparent transparent transparent;
}