自定义样式的select下拉框

在网上看到了一个写的挺好挺简单的自定义select样式的插件,在理解了它的原理之后,自己也尝试着写了一个。

核心思想:将原来的<select><option></option></select>隐藏掉动态写进页面一个<div>在这里面用<dl><dt><dd>这样的结构代替原来的下拉框。

大概框架:<div class="i_selectbox">//这是用来包裹整个自定义的select框

<div class="i_currentselected"></div>//这是当前默认显示的select框

<div class="i_selectoption"></div> //这是选择是弹出的下拉框

</div>

全部代码:

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3 <head>
  4   <title></title>
  5   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6   <script type="text/javascript" src="jquery.min.js"></script>
  7
  8   <style>
  9
 10
 11      /* 这里来定义你自己的select框的样式 */
 12     .i_selectbox {
 13       margin-top:20px;
 14       height:32px;
 15       position:relative;
 16       font-size:14px
 17     }
 18     /* 默认显示的select框*/
 19     .i_selectbox .i_currentselected {
 20       width:150px;
 21       height:24px;
 22       background:url(select.png) 176px 4px no-repeat;
 23       border:1px solid #cdcdcd;
 24       text-indent:10px;
 25       line-height:24px;
 26       cursor:pointer
 27     }
 28     /* 下拉选择框 */
 29     .i_selectbox .i_selectoption {
 30       overflow-x:hidden;
 31       overflow-y:hidden;
 32       position:absolute;
 33       left:0px;
 34       top:17px;
 35       padding:5px;
 36       background-color:#fff;
 37       background:rgba(255,255,255,.9);
 38       border:1px solid #eee
 39     }
 40     .i_selectbox .i_selectoption dt {
 41       height:24px;
 42       background-color:#eee;
 43       text-indent:5px;
 44       font-style:italic;
 45       color:#555;
 46       line-height:24px;
 47     }
 48     .i_selectbox .i_selectoption dd{
 49       margin-left: -3px;
 50       height:30px;
 51       border-bottom:1px solid #cdcdcd;
 52       cursor:pointer;
 53       text-indent:2px;
 54       line-height:30px
 55     }
 56     .i_selectbox .i_selectoption dd:hover{
 57       background-color:#cdcdcd;
 58       color:#fff
 59     }
 60     .i_selectbox .i_selectoption dd.selected{
 61       background-color:#f17f36;
 62       color:#fff
 63     }
 64      </style>
 65 <head>
 66 <body>
 67       <select class="my_select">
 68
 69           <option value="0">Alabama</option>
 70           <option value="1">Alaska</option>
 71           <option value="2">Arizona</option>
 72
 73           <option value="3">Arkansas</option>
 74           <option value="4">California</option>
 75           <option value="5">Colorado</option>
 76
 77           <option value="6">Connecticut</option>
 78           <option value="7">Delaware</option>
 79           <option value="8">Columbia</option>
 80           <option value="9">Florida</option>
 81
 82         </select>
 83         <script>
 84
 85              /*插件写法的函数*/
 86              $.fn.newStyle = function(){
 87               var set = {
 88                 selectbox : ‘i_selectbox‘,
 89                 showselect : ‘i_currentselected‘,
 90                 selectoption : ‘i_selectoption‘,
 91                 curselect : ‘selected‘,
 92                 width : 200,
 93                 height :150,
 94                 zindex : 2
 95               };
 96               /*让最初的select隐藏*/
 97               $(this).hide();
 98               /*动态写进去html替代原本的select*/
 99               var html = ‘<div class="‘+set.selectbox+‘" style="zindex:‘+set.zindex+‘">‘
100                          +‘<div class="‘+set.showselect+‘" style="width:‘+set.width+‘px;">‘+$(this).find(‘option:selected‘).text()+‘</div>‘
101                          +‘<dl class="‘+set.selectoption+‘" style="display:none;width:‘+set.width+‘px" >‘;
102               if($(this).find(‘optgroup‘).size()>0){
103                   $(this).find(‘optgroup‘).each(function(){
104                    html += ‘<dt>‘+$(this).attr(‘label‘)+‘</dt>‘;
105                           $(this).find(‘option‘).each(function(){
106                               if($(this).is(‘:selected‘)){
107                                 html += ‘<dd class="‘+set.curselect+‘">‘+$(this).text()+‘</dd>‘;
108                               }else{
109                                 html += ‘<dd>‘+$(this).text()+‘</dd>‘;
110                               }
111                           });
112                   });
113               }else{
114                 $(this).find(‘option‘).each(function(){
115                    if($(this).is(‘:selected‘)){
116                      html += ‘<dd class="‘+set.curselect+‘">‘+$(this).text()+‘</dd>‘;
117                    }else{
118                      html += ‘<dd>‘+$(this).text()+‘</dd>‘;
119                    }
120                 });
121
122               }
123               /*将html插入到select框的后面*/
124               $(‘select‘).after(html);
125               console.log(0);
126               /*添加事件*/
127
128               /*默认显示框的选择事件*/
129               $(‘.‘+set.showselect).toggle(function(){
130                  console.log(1);
131                  /*$(‘.selectoption‘).hide();*/
132                  $(‘.‘+set.selectbox).css(‘zindex‘,set.zindex);
133                  $(‘.‘+set.selectoption).css(‘zindex‘,set.zindex+1);
134                  $(‘.‘+set.selectoption).toggle();
135               },function(){
136                  $(‘.‘+set.selectoption).css(‘zindex‘,set.zindex);
137                  $(‘.‘+set.selectoption).toggle();
138               });
139               /*下拉列表的选择事件*/
140               $(‘.‘+set.selectoption).find(‘dd‘).click(function(){
141                  console.log(2);
142                  $(this).addClass(set.curselect).siblings().removeClass(set.curselect);
143                  var index = $(‘.‘+set.selectoption).find(‘dd‘).index(this);
144                  $(‘.‘+set.showselect).text($(this).text());
145                  $(this).find(‘option‘).eq(index).attr(‘selected‘,‘selected‘);
146                  $(‘.‘+set.selectoption).hide();
147               });
148               /*点击select框之外的其他部分的时候select框应该收起*/
149                $(‘html,body‘).click(function(e){
150                        /* 判断当前的点击事件目标不是set.selectoption这个class*/
151                          if(e.target.className.indexOf(set.selectoption)==-1){
152                               $(‘.‘+set.selectoption).hide();
153                               $(‘.‘+set.selectbox).css(‘zIndex‘,set.zindex);
154                           }
155                 });
156
157             }
158
159         $(‘.my_select‘).newStyle();
160
161         </script>
162 </body>
163 </html>

各个浏览器的兼容性还蛮好的喔~~

源插件地址:http://mrthink.net/jquery-select-isimulateselect/

自定义样式的select下拉框

时间: 2024-08-05 06:18:18

自定义样式的select下拉框的相关文章

自定义样式的select下拉框深入探索

第一个版本: 首先实现自定义select下拉框应该具有的功能,我是选择将原来的select隐藏掉,自己在jquery代码中动态写进去<dl><dd><dt>这样的结构来模拟真正的select的操作. 用来模拟select框的div结构如下: <div class="selectbox">//包裹整个模拟框的盒子 <div class="currentselected"></div>//用于当前默

去除select下拉框默认样式

去除select下拉框默认样式 select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appearance:none; -moz-appearance:none; -webkit-appearance:none; /*将背景改为红色*/ background:red; /*加padding防止文字覆盖*/ padding-right: 14px; } /*清除

select 下拉框的样式改变

最近在做地图遇到一个很有意思的事情,就是select下拉框的样式改变 /*第一种,改变下拉框样式*/ select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appearance:none; -moz-appearance:none; -webkit-appearance:none; /*在选择框的最右侧中间显示小箭头图片*/ background: url("

浮动子div撑开父div的几种方法、给select赋值、zoom样式的含义、实现select下拉框readonly

1.浮动子div撑开父div的几种方法: (1)在父div中在添加一个清除浮动的子div<div style=" clear:both;"></div>,该div不设置任何样式,只用来清除浮动 (2)在父div的css样式中设置overflow:hidden;zoom:1; (3)设置父div也为浮动元素float:left:,这样设置的坏处是不能用margin:auto:实现居中 (4)设置父元素display:inline-block;,这样设置的坏处是不能

jQuery制作简洁的多级联动Select下拉框

今天我们要来分享一款很实用的jQuery插件,它是一个基于jQuery多级联动的省市地区Select下拉框,并且值得一提的是,这款联动下拉框是经过自定义美化过的,外观比浏览器自带的要漂亮许多.另外,这个Select下拉框也可以绑定下拉事件,并获取当前选中项的值. html代码: <div class="wrap">        <div class="nice-select" name="nice-select">   

Bootstrap Flat UI的select下拉框显示问题解决

bootstrap中文网(http://www.bootcss.com/)里推荐项目有Flat UI(http://www.bootcss.com/p/flat-ui/),非常漂亮,而且少有的竟然具有select下拉框. 我直接打开example(Flat-UI-master/docs/examples/select.html)都是可以的,但是放到我的网站里则不行. 使用chrome调试经过分析,原因是: $('[data-toggle="select"]').select2(); 这

一款基于jQuery的联动Select下拉框

今天我们要来分享一款很实用的jQuery插件,它是一个基于jQuery多级联动的省市地区Select下拉框,并且值得一提的是,这款联动下拉框是经过自定义美化过的,外观比浏览器自带的要漂亮许多.另外,这个Select下拉框也可以绑定下拉事件,并获取当前选中项的值. 在线预览   源码下载 实现的代码. html代码: <div class="wrap"> <div class="nice-select" name="nice-select&

JavaScript获取Select下拉框Option的Value和Text值的方法

Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个form表单中的Select下拉框菜单为例,来说明如何用JavaScript获取其 Value值和Text值: 示例表单,里面是一个select下拉列表框的各个列表项及值: <form name="form1"> <select name="testvalue&

Javascript获取select下拉框选中的的值

现在有一id=test的下拉框,怎么拿到选中的那个值呢? 分别使用javascript原生的方法和jquery方法 <select id="test"  name="">     <option   value="1">text1</option>     <option   value="2">text2</option>    </select> co