码迷,mamicode.com
首页 > 其他好文 > 详细

自定义样式的select下拉框

时间:2014-08-15 19:26:49      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   os   io   for   

    在网上看到了一个写的挺好挺简单的自定义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下拉框,布布扣,bubuko.com

自定义样式的select下拉框

标签:style   blog   http   color   java   os   io   for   

原文地址:http://www.cnblogs.com/skylar/p/3915367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!