自制Jquery下拉框插件

(function ($) {
    $.fn.select3 = function (option) {
        var _this = $(this);

        var isInit = _this.prev(‘div‘).hasClass(‘select3-parent‘);
        if(isInit) return false;

        var _default = {
            className: ‘select3-parent‘, //下拉框样式可自定义
            width: ‘300px‘
        };

        //默认会根据元素设置的宽度给设置宽度,这里最好设置原始下拉框的宽度

        //合并自定义属性
        _default = $.extend(_default, option);
        var _data_val = _this.children(‘option:checked‘).attr(‘value‘); //默认选中项的值
        _data_val = (_data_val ? _data_val : ‘-‘)
        var _text = _this.children(‘option:checked‘).text().trim(); //默认选中项的文本
        _text = (_text ? _text : ‘-‘);

        var _tplWrap = ‘<div class="‘+ _default.className +‘" style="width:‘+ _default.width+‘">‘ +
                        ‘<div class="select3-topic" data-val="‘+ _data_val +‘"><span>‘+ _text +
                        ‘</span><i></i></div><ul class="select3-ul"  style="width:‘+ _default.width+‘">‘;

        _this.children().each(function () {
            var _this = $(this);
            var _data_val = $(this).attr(‘value‘);
            var _text = $(this).text().trim();

            if (_this.is(‘optgroup‘)) {
                _text = _this.attr(‘label‘);
                _data_val = ‘group‘;
                _tplWrap += ‘<li data-val="‘+ _data_val +‘" class="select3-group">‘+ _text + ‘<ul>‘;
                _this.children().each(function () {
                    _text = $(this).text().trim();
                    _data_val = $(this).attr(‘value‘);
                    _tplWrap += ‘<li data-val="‘+ _data_val +‘">‘+ _text +‘</li>‘;
                });
                _tplWrap += ‘</ul></li>‘;
            }else{
                _tplWrap += ‘<li data-val="‘+ _data_val +‘">‘+ _text +‘</li>‘;
            }
        });

        _tplWrap += ‘</ul></div>‘;

        _this.addClass(‘hide‘);//隐藏当前控件

        _this.before(_tplWrap)//显示插件化后的控件

        //绑定下拉事件
        $(‘.select3-topic‘).unbind().bind(‘click‘, function () {
            $(‘.open‘).not($(this).parent(‘div‘)).removeClass(‘open‘);
            $(this).addClass(‘open‘);
            $(this).children().addClass(‘open‘);
            $(this).parent(‘div‘).toggleClass(‘open‘);
        });

        //绑定行点击事件
        $(‘.select3-ul li[data-val!="group"]‘).unbind().bind(‘click‘, function () {
            var _parent = $(this).parents(‘.select3-ul‘);//获取父标签
            var _val = $(this).attr(‘data-val‘);
            var _text = $(this).text();
            _parent.siblings(‘div‘).attr(‘data-val‘, _val);
            _parent.siblings(‘div‘).find(‘span‘).text(_text);
            _parent.parent(‘div‘).removeClass(‘open‘);//隐藏父标签
            _this.val(_val);//设置select值

            _this.change();
        });

        //body click 去除下拉
        $(‘body‘).unbind().click(function(e){

            var pType = e.target.tagName;
            var className = e.target.className;
            var reg = new RegExp(‘open‘)

            if (pType == ‘I‘ || pType == ‘SPAN‘) {
                className = e.target.parentElement.className;
            }

            if (className == ‘open-dt‘ || pType == ‘DT‘ || reg.test(className)) {
                return;
            }

            $(‘.open‘).removeClass(‘open‘);//select3第2版

            $(‘dd‘).slideUp(10, function () {
                $(‘.select-has-border‘).removeClass(‘select-has-border-open‘);
                $(‘dt[role-page]‘).attr(‘style‘, ‘‘);
                $(‘.campaign-query‘).css(‘border-radius‘, ‘5px‘);
                $(‘.cp-select ‘).removeClass(‘cp_select_open‘);
                $(‘.select-no-border-open‘).attr(‘class‘, ‘select-no-border‘);
                $(‘.select-no-border-open‘).children(‘dt‘).attr(‘style‘, ‘‘);
            });
        });

    };
})(jQuery);
/* select3 容器最外层未点开样式 */
.select3-parent{
    font-family: arial, Helvetica, sans-serif;
    font-size: 12px;
    display: inline-block;
    border-radius: 5px;
    border:1px solid #dfdfdf;
    height: 30px;
    line-height: 30px;
    cursor: pointer;
    position: relative;
    background-color: #ffffff;
    color: #666666;

    /* test */
    min-width: 60px;

}

.select3-topic{
    height: 30px;
    overflow: hidden;
    padding-left: 10px;
    padding-right: 10px;
}

.select3-topic i{
    float:right;
}

/* select3 下拉内容 */
.select3-ul{
    display: none;
    position: absolute;
    list-style: none;
    padding:0;
    margin:0;
    border:1px solid #dfdfdf;
    border-top: none;
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
    margin-left:-1px;
    background-color: #ffffff;
    z-index: 999;
    overflow: auto;
    max-height: 330px;
    box-shadow: 0 6px 12px rgba(0,0,0,0.2);

    /* test */
    width: 300px;
}

/* 下拉内容样式 */

.select3-ul li{
    font-size: 12px;
    padding-left: 10px;
    padding-right: 10px;
}

.select3-ul li:hover{
    background-color: #111e30;
    color: #ffffff;
}

/* 分组标题样式 select3-group */
.select3-ul li.select3-group{
    padding-left: 0;
    padding-right: 0;
    text-indent: 10px;
    color: black;
}

.select3-group{
    cursor: default;
    font-weight: bold;
}

.select3-group ul{
    font-weight: normal;
    color: #666666;
    list-style: none;
    padding:0;
    margin:0;
}

.select3-group li{
    padding-left: 10px;
    padding-right: 10px;
}

li.select3-group:hover{
    background-color: #ffffff;
    color: black;
}

.select3-group li:hover{
    cursor: pointer;
}

/* select3 容器最外层点开后样式 */
.select3-parent.open{
    border-bottom-left-radius: 0px;
    border-bottom-right-radius: 0px;
    box-shadow: 0 6px 12px rgba(0,0,0,0.2);
    border-bottom: none;
    border-bottom: 1px solid #fff;
}

/* 点开后,下拉菜单内容的样式 */
.select3-parent.open .select3-ul{
    display: block;
}

.select3-parent.open .select3-topic{
    padding:0px;
    height: 29px;
    margin-left: 10px;
    margin-right: 10px;
    border-bottom: 1px solid #dfdfdf;
}

时间: 2025-01-06 01:00:05

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

jquery下拉框插件心得

想记录下自己在开发这个下拉框插件之后的心得,发现写一篇博客,真是"知之非艰,行之惟艰".所以再有看到好的文章,就不会再吝啬自己的"赞"了. 多次想该如何写比较好呢?最终决定,将以后我可能用得到的东西一条条记录下来,一条条来写,这样比较清晰. 1.写jquery插件需要的一个结构 // 定义jQuery私有作用域 (function ($) { // 插件默认属性 var defaults = { name1: "value1", name2: &

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

原始的下拉框不好看这里推荐一个jQuery自定义漂亮的下拉框插件8种效果演示 在线预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 <!DOCTYPE html> <html lang="en" class=

下拉框插件的详解

本插件是基于jQuery实现的 function DropSelect(obj){ obj = obj || {}; var p = this; p.id = obj.id || 'selectDrop'; //这个id为页面上的元素的id,一般为添加下拉框的div元素 p.data = obj.data || []; //传入此下拉框插件的数据是一个数组形式的对象[{text: '', value: ''},{text: '', value: ''}],每一项就是下拉框的每一行(每一选项) i

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

其实网上关于该控件的使用教程已经很多了,其中 query多选下拉框插件 jquery-multiselect Jquery多选下拉列表插件jquery multiselect功能介绍及使用 这2个的介绍已经比较详细了,尤其是第二个有扩展MyValues函数,只是扩展有些bug,这里我在提出一些我的扩展,我们应该把multiValues属性定义在options里面,让每个multiselect控件都有自己的multiValues属性.我这里还需要一个获取text的方法.有关Myvalues和Myt

JQuery 下拉框左右移动

JQuery下拉框左右移动 触发点击按钮时间 然后通过$("#one option:selected")获取目标的下拉框所选中的值  然后把选中的添加到你所要的下拉框中 同时要把原来下拉框的值删除  代码可以一句搞定 $("#one option:selected").appendTo("#two") 要注意的是: append()与appendTo()方法的区别. append(content|fn)向每个匹配的元素内部追加内容. append

jquery 下拉框 收藏

jquery 下拉框 Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发 2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text 3. var checkValue=$

jQuery下拉框操作系列$(&quot;option:selected&quot;,this) &amp;&amp;(锋利的jQuery)

jQuery下拉框操作系列$("option:selected",this)  &&(锋利的jQuery) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

jQuery下拉框扩展和美化插件Chosen

Chosen 是一个支持jquery的select下拉框美化插件,它能让丑陋的.很长的select选择框变的更好看.更方便.不仅如此,它更扩展了select,增加了自动筛选的功能.它可对列表进行分组,同时也可禁用某些选择项. 先来看下插件的效果: 下面和大家一起看下它的用法. 引入核心文件 1 <link rel="stylesheet" href="docsupport/style.css"> 2 <link rel="styleshe

select下拉框插件jquery.editable-select

项目中有个需求,下拉框既可以下拉选择,也可以手动填写 html代码 1 <span>数据来源</span> 2 <select class="source"> 3 <option value="0">人工导入</option> 4 <option value="1">数据服务平台</option> 5 </select> js代码 1 $('#noMe