1. (function ($) {
  2. $.fn.select3 = function (option) {
  3.  
  4. $(this).each(function () {
  5. var _this = $(this);
  6. var isInit = _this.prev('div').hasClass('select3-parent');
  7. if(isInit){
  8. _this.prev('div.select3-parent ').remove();//清空之前的组件
  9. }
  10.  
  11. var _default = {
  12. className: 'select3-parent', //下拉框样式可自定义
  13. width: '100px'
  14. };
  15.  
  16. //是否是禁用状态
  17. var isDisabled = _this[0].attributes.disabled;
  18. if (isDisabled) {
  19. _default.className += ' select3-disabled';
  20. }
  21.  
  22. //默认会根据元素设置的宽度给设置宽度,这里最好设置原始下拉框的宽度
  23.  
  24. //合并自定义属性
  25. _default = $.extend(_default, option);
  26. var _data_val = _this.children('option:checked').attr('value'); //默认选中项的值
  27. _data_val = (_data_val ? _data_val : '-')
  28. var _text = _this.children('option:checked').text().trim(); //默认选中项的文本
  29. _text = (_text ? _text : '-');
  30. var hasBorder = _default.border == false ? 'no-border' : '';
  31.  
  32. var _tplWrap = '<div class="'+ _default.className +' '+ hasBorder+'" style="width:'+ _default.width+'">' +
  33. '<div class="select3-topic" data-val="'+ _data_val +'"><span>'+ _text +
  34. '</span><i class="fa fa-sort-down"></i></div><ul class="select3-ul" style="width:'+ _default.width+'">';
  35.  
  36. _this.children().each(function () {
  37. var _this = $(this);
  38. var _data_val = $(this).attr('value');
  39. var _text = $(this).text().trim();
  40. var _disabled = _this.attr('disabled');
  41.  
  42. if (_this.is('optgroup')) {
  43. _text = _this.attr('label');
  44. _data_val = 'group';
  45. _tplWrap += '<li data-val="'+ _data_val +'" class="select3-group">'+ _text + '<ul>';
  46. _this.children().each(function () {
  47. _text = $(this).text().trim();
  48. _data_val = $(this).attr('value');
  49. _tplWrap += '<li data-val="'+ _data_val +'">'+ _text +'</li>';
  50. });
  51. _tplWrap += '</ul></li>';
  52. }else{
  53. if (_disabled) {
  54. _tplWrap += '<li data-val="'+ _data_val +'" disabled="disabled">'+ _text +'</li>';
  55. } else {
  56. _tplWrap += '<li data-val="'+ _data_val +'">'+ _text +'</li>';
  57. }
  58. }
  59. });
  60.  
  61. _tplWrap += '</ul></div>';
  62.  
  63. _this.addClass('hide');//隐藏当前控件
  64.  
  65. _this.before(_tplWrap)//显示插件化后的控件
  66.  
  67. //绑定下拉事件
  68. $('.select3-topic').unbind().on('click', function () {
  69. var isDisabled = $(this).parent('div').hasClass('select3-disabled');
  70. if (isDisabled) {
  71. return;
  72. }
  73.  
  74. $('.open').not($(this).parent('div')).removeClass('open');
  75. $(this).addClass('open');
  76. $(this).children().addClass('open');
  77. $(this).parent('div').toggleClass('open');
  78. });
  79.  
  80. //绑定行点击事件
  81. $('.select3-ul li[data-val!="group"]').unbind().on('click', function () {
  82. var _parent = $(this).parents('.select3-ul');//获取父标签
  83. var _val = $(this).attr('data-val');
  84. var _text = $(this).text();
  85. var _disabled = $(this).attr('disabled');
  86.  
  87. if (_parent.siblings('div').attr('data-val') == _val || _disabled) {
  88. return;
  89. }
  90.  
  91. _parent.siblings('div').attr('data-val', _val);
  92. _parent.siblings('div').find('span').text(_text);
  93. _parent.parent('div').removeClass('open');//隐藏父标签
  94. _parent.parent('div').next('select').val(_val);//设置select值
  95.  
  96. _parent.parent('div').next('select').change();
  97. });
  98. });
  99.  
  100. //body click 去除下拉
  101. $('body').unbind().click(function(e){
  102.  
  103. var pType = e.target.tagName;
  104. var className = e.target.className;
  105. var reg = new RegExp('open')
  106.  
  107. if (pType == 'I' || pType == 'SPAN') {
  108. className = e.target.parentElement.className;
  109. }
  110.  
  111. if (className == 'open-dt' || pType == 'DT' || reg.test(className)) {
  112. return;
  113. }
  114.  
  115. $('.open').removeClass('open');//select3第2版
  116. });
  117.  
  118. };
  119. })(jQuery);

CSS 代码:

  1. /* select3 容器最外层未点开样式 */
  2. .select3-parent{
  3. font-family: Arial,"Microsoft YaHei";
  4. font-size: 12px;
  5. display: inline-block;
  6. border-radius: 5px;
  7. border:1px solid #dfdfdf;
  8. height: 30px;
  9. line-height: 30px;
  10. cursor: pointer;
  11. position: relative;
  12. background-color: #ffffff;
  13. color: #666666;
  14. min-width: 60px;
  15. vertical-align: top;
  16. }
  17.  
  18. .select3-disabled{
  19. color:#999;
  20. cursor:default;
  21. background-color:#eee;
  22. }
  23.  
  24. .no-border{
  25. border:none;
  26. bottom: -5px;
  27. }
  28.  
  29. .select3-topic{
  30. height: 30px;
  31. line-height: 30px;
  32. /*overflow: hidden;*/
  33. padding-left: 10px;
  34. padding-right: 10px;
  35. }
  36.  
  37. .select3-topic span{
  38. height: 30px;
  39. display: inline-block;
  40. width: 88%;
  41. overflow: hidden;
  42. text-overflow:ellipsis;
  43. }
  44.  
  45. .select3-topic i{
  46. float:right;
  47. margin-top:5px;
  48. }
  49.  
  50. /* select3 下拉内容 */
  51. .select3-ul{
  52. display: none;
  53. position: absolute;
  54. list-style: none;
  55. padding:0;
  56. margin:0;
  57. border:1px solid #dfdfdf;
  58. border-top: none;
  59. border-bottom-left-radius: 5px;
  60. border-bottom-right-radius: 5px;
  61. margin-left:-1px;
  62. background-color: #ffffff;
  63. z-index: 999;
  64. overflow: auto;
  65. max-height: 330px;
  66. box-shadow: 0 6px 12px rgba(0,0,0,0.2);
  67. }
  68.  
  69. /* 下拉内容样式 */
  70.  
  71. .select3-ul li{
  72. font-size: 12px;
  73. padding-left: 10px;
  74. padding-right: 10px;
  75. text-overflow:ellipsis;
  76. }
  77.  
  78. .select3-ul li[disabled]{
  79. /*background-color: #eeeeee;*/
  80. color: #dfdfdf;
  81. }
  82.  
  83. .select3-ul li:hover{
  84. background-color: #111e30;
  85. color: #ffffff;
  86. }
  87.  
  88. .select3-ul li[disabled]:hover{
  89. background-color: #ffffff;
  90. color:#dfdfdf;
  91. cursor: default;
  92. }
  93.  
  94. /* 分组标题样式 select3-group */
  95. .select3-ul li.select3-group{
  96. padding-left: 0;
  97. padding-right: 0;
  98. text-indent: 10px;
  99. color: black;
  100. }
  101.  
  102. .select3-group{
  103. cursor: default;
  104. font-weight: bold;
  105. }
  106.  
  107. .select3-group ul{
  108. font-weight: normal;
  109. color: #666666;
  110. list-style: none;
  111. padding:0;
  112. margin:0;
  113. }
  114.  
  115. .select3-group li{
  116. padding-left: 10px;
  117. padding-right: 10px;
  118. }
  119.  
  120. li.select3-group:hover{
  121. background-color: #ffffff;
  122. color: black;
  123. }
  124.  
  125. .select3-group li:hover{
  126. cursor: pointer;
  127. }
  128.  
  129. /* select3 容器最外层点开后样式 */
  130. .select3-parent.open{
  131. border-bottom-left-radius: 0px;
  132. border-bottom-right-radius: 0px;
  133. box-shadow: 0 6px 12px rgba(0,0,0,0.2);
  134. border-bottom: none;
  135. border-bottom: 1px solid #fff;
  136. }
  137.  
  138. .select3-parent.open.no-border{
  139. border-top: 1px solid #dfdfdf;
  140. border-left: 1px solid #dfdfdf;
  141. border-right: 1px solid #dfdfdf;
  142. }
  143.  
  144. /* 点开后,下拉菜单内容的样式 */
  145. .select3-parent.open .select3-ul{
  146. display: block;
  147. }
  148.  
  149. .select3-parent.open .select3-topic{
  150. padding:0px;
  151. height: 29px;
  152. margin-left: 10px;
  153. margin-right: 10px;
  154. border-bottom: 1px solid #dfdfdf;
  155. }
  1. 禁用效果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARAAAAAqCAIAAAD0/pM9AAACYElEQVR4nO3dvY6yQBiG4T3/M7CnsKKn5xDomYEhgjAalWRiNsavQFf9RN0RkJ+9r4oo5g3J8wyoCXwd68znc2NM7VvAX/ZV+yqFAWpRGMAChQEsUBjAQtPClGWplIqiKARGSEqZJMkv026MaVQYrbWUcrFY5Hm+AkaoKIo0TaWUWuvnad9sNnEcv1+YsiyrMX0fMtBUtfSXZfko7caYOI4Ph8P7hUmSJE3Tvo8UaEeapkmSPEp7lmW73e7Y5DuMlLIoir4PE2iH1loI8SjtcRx/f383KkwYhn0fI9CmMAyfpL3aoDDACYUBLFAYwAKFASwMpjCB57j+f1t1fHc2e/L2n56F7o2gML47e8E2aFOdhe4NujC+201mpjoL3eu5MIHn3C2oVbB8dzZzvKBuv2uXXV6a6ix80jDPMHeJqb/+DzznrWBNdRa6N8zC3IWo3ZV4qrPQvfEU5uc13z2nqZVVf0Kz0L1hFKb6weg+WLd5Ou1wCdZbpjoLH9F7YXy3ilTtSnzePO0UBMHqJ1jnD1qY6ix8Ts+FufzAWhss33W8wHdvr+ivV+JLul7/8TfOWRiW3s8wZ7frb/1339NffXVXLkEQrALP+d2X5RHNwsAMpjDAGFAYwAKFASxQGMAChQEsUBjAQreF4TZLmJLOb7PEjfwwJVmWKaUepb2FG/mVZSmE6PswgRZoraMo2m63j9JujJFSNirM8XjM81wIkaYpd1jGSGmtl8ullDLLsudpX6/XUsqmj7swxiil6p4jAIyAEEIp9eTccm2/3/NAJcAChQEsUBjAAoUBLFAYwMI/iPaz/g+iTJUAAAAASUVORK5CYII=" alt="" />

常态:

自制Jquery下拉框插件的更多相关文章

  1. jQuery下拉框插件8种效果

    jQuery自定义漂亮的下拉框插件8种效果 jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 <body class=" ...

  2. 带搜索框的jQuery下拉框插件

    由于下拉框的条数有几十个,于是打算找一个可以搜索查找功能的下拉框,刚开始在网上看了几个,都是有浏览器兼容性问题,后来看到这个“带搜索框的jQuery下拉框美化插件 searchable”,看演示代码简 ...

  3. jquery 下拉框插件,实现智能补全,模糊搜索,多选

    近期已朋友问我问题,实现类似淘宝百度的下啦搜索条,看了网上好多帖子,都看起来好复杂,而且引用了好多没用的东西,而且多选选择内容多之后容易样式奔溃, 无奈之下只好自己改了, 话不多说上效果图: 模糊搜索 ...

  4. jQuery自定义漂亮的下拉框插件8种效果演示

    原始的下拉框不好看这里推荐一个jQuery自定义漂亮的下拉框插件8种效果演示 在线预览 下载地址 实例代码 <!DOCTYPE html> <html lang="en&q ...

  5. Dropdown.js基于jQuery开发的轻量级下拉框插件

    Dropdown.js 前言 在SPA(Single Page Application)盛行的时代,jQuery插件的轮子正在减少,由于我厂有需求而开发了这个插件.如果觉得本文对您有帮助,请给个赞,以 ...

  6. query多选下拉框插件 jquery-multiselect(修改)

    其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介 ...

  7. 基于Bootstrap的下拉框插件bootstrap-select

    写在前面: 在这次的项目中,没有再使用liger-ui做为前端框架了,改为了Bootstrap,这次也好接触下新的技术,在学习的过程中发现,Bootstrap的一些组件基本都是采用class的形式,就 ...

  8. jquery 下拉框 收藏

    jquery 下拉框  Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code. ...

  9. jQuery下拉框操作系列$("option:selected",this) &&(锋利的jQuery)

    jQuery下拉框操作系列$("option:selected",this)  &&(锋利的jQuery) <!DOCTYPE html> <ht ...

随机推荐

  1. 【摘抄】u3d|unity学习教程与方法

    小编,因为下面这句话,还是决定,只摘链接地址(来自百度经验): http://jingyan.baidu.com/article/19192ad820f17be53e570715.html 经验内容仅 ...

  2. 【转载】u3d游戏客户端架构(---)

    原文:http://blog.csdn.net/xtxy/article/details/8474506 主要是mvc架构, M层为数据层,两个用途:1保存数据:2发送数据更新信息: V层为视图层,两 ...

  3. [Selenium] Selenium WebDriver 的下载和安装

    为配合较为广泛使用Java 语言的程序员,仅以WebDriver 的Java语言绑定进行讲解. 步骤1:下载并安装Java开发环境 1)在系统中安装JDK(Java开发工具吧,Java Develop ...

  4. linux学习二(小随笔)

    1apt-get 解包命令 tar zxvf ......... 打包命令 tar czvf ......... gz gunzip ........gz gzip    ..........gz l ...

  5. Spring Data JPA 和MyBatis比较

    现在Dao持久层的解决方案中,大部分是采用Spring Data JPA或MyBatis解决方案,并且传统企业多用前者,互联网企业多用后者. Spring Data JPA 是Spring Data ...

  6. Cascaded pose regression

    最近再看face alignment的相关文章,目前比较流行的算法都是基于(Cascaded pose regression,CPR)[1]的框架上做的,该算法之所以流行的原因是简单高效.CPR分为训 ...

  7. CodeForces 712B Memory and Trident (水题,暴力)

    题意:给定一个序列表示飞机要向哪个方向飞一个单位,让你改最少的方向,使得回到原点. 析:一个很简单的题,把最后的位置记录一下,然后要改的就是横坐标和纵坐标绝对值之和的一半. 代码如下: #pragma ...

  8. emacs配置文件的基础知识 (转载)

    转自:http://blog.csdn.net/schumyxp/article/details/2278268 emacs的配置文件,叫作.emacs,是个隐藏文件,存在于当前用户的根目录下面,也就 ...

  9. 详解Redis Cluster集群

    Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构达到负载 ...

  10. Swift里计数相关的小细节

    Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug. 在讲主题前,先说个小细节. Swift里非常严密的定义了一大堆字符 ...