jq编写插件

html

<div id="addSelect">
    <i><em>作品类型</em></i>
</div>
<script type="text/javascript">
 // 下拉框引用
    $("#addSelect").mySelect({ "data": ["请选择作品类型", "文字作品", "视听作品", "美术作品", "摄影作品", "音乐作品"] });
//下拉框选中值
$("#addSelect").mySelect("getVal")
//下拉框清除验证
$("#addSelect").mySelect("clearVerificate");
</script>

js

//jq封装下拉列表
// 立刻执行函数
; (function ($) {
    function mySelectFn(elem, options) {
        //创建一些默认值,拓展任何被提供的选项
        this.defaults = { data: [], ele: elem };
        this.opts = $.extend({}, this.defaults, options);
        this.init()
    }
    mySelectFn.prototype = {
        init: function () {
            var dom = '<div class="mySelectBox" id="mySelectBox">'
                + '<div class="mySelect" id="selectedVal">' + this.opts.data[0] + '</div>'
                + '<ul class="myOptionsBox" id="myOptionsBox">';
            $.each(this.opts.data, function (i, item) {
                dom += '<li>' + item + '</li>';
            })
            dom += '</ul></div>'
                + '<span class="inputTips" style="display: none;">请选择作品类型!</span>';
            this.opts.ele.append(dom);
            // 打开或者关闭选项
            $("body").on("click", function (e) {
                if ($(e.target).hasClass("mySelect") == true) { //点击下拉框
                    $("#myOptionsBox").css("display") == "none" ? $("#myOptionsBox").show() : $("#myOptionsBox").hide();
                    return;
                }
                $("#myOptionsBox").hide();
            });
            // 下拉框选中
            $("#mySelectBox li").click(function (e) {
                $(this).addClass("selectAct").siblings().removeClass("selectAct");
                $("#selectedVal").text($(this).text());
            });
        },
        getVal: function () {//获取下拉框值
            return $("#selectedVal").text();
        },
        setVal: function (val) {//设置下拉框值
            $("#selectedVal").text(val);
            $("#myOptionsBox li").each(function (i, item) {
                if ($(item).text() == val) {
                    $(item).addClass("selectAct").siblings().removeClass("selectAct");
                }
            });
        },
        getVerificate: function () {
            $("#mySelectBox").siblings(".inputTips").show();
        },
        clearVerificate: function () {
            $("#mySelectBox").siblings(".inputTips").hide();
            this.setVal("请选择作品类型");
        }
    }
    $.fn.mySelect = function (options) {
        // 实现链式调用
        // return this.each(function () {
        // 缓存this对象
        var $this = $(this);
        var instance = $this.find("#mySelectBox").length > 0;
        // 判断实例是否存在,不存在则创建对象,并将该对象及配置项传入
        if (!instance) {
            instance = new mySelectFn($this, options);
        }
        // 在外部可以通过$(selection).mySelect("getVal")
        if ($.type(options) === "string") {
            if (options.indexOf("(") > -1 && options.indexOf(")") > -1) {
                return eval("mySelectFn.prototype." + options);
            }
            if (options.indexOf("(") == -1 && options.indexOf(")") == -1) {
                return mySelectFn["prototype"][options]();
            }

        }
        // });
    };
})(jQuery);

 css

.mySelectBox {
    width: 100%;
    line-height: 0.36rem;
    border: 1px solid #dcdfe6;
    border-radius: 4px;
    position: relative;
    color: #333333;
}
.mySelect {
    width: 100%;
    padding-right: 0.48rem;
    height: 0.36rem;
    line-height: 0.36rem;
    position: relative;
}
.mySelect:before {
    content: "";
    width: 0.18rem;
    height: 0.1rem;
    background: url(../image/addAct.png) no-repeat 0/100% 100%;
    position: absolute;
    top: 50%;
    margin-top: -0.05rem;
    right: 0;
}
.myOptionsBox {
    display: none;
    box-sizing: border-box;
    width: 100%;
    /* height: 2rem; */
    border: 1px solid rgb(59, 59, 59);
    overflow: hidden auto;
    background: rgb(255, 255, 255);
    box-shadow: 0px 2px 8px 4px rgb(108 108 108 / 26%);
    position: absolute;
    top: 0.4rem;
    right: -0.48rem;
    text-align: left;
    z-index: 2;
}
.myOptionsBox li {
    display: block;
    white-space: nowrap;
    line-height: 0.6rem;
    padding: 0px 0.2rem;
}
.myOptionsBox .selectAct {
    color: #fff;
    background: #cfefff;
}
.myOptionsBox li::selection,
.myOptionsBox li:hover {
    color: #fff;
    background: #cfefff;
}
.myOptionsBox li:focus-visible {
    outline: -webkit-focus-ring-color auto 1px;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值