niceSelect.js 4.21 KB
/**
 * Created by mac on 17/5/10.
 */
//nice_select
function diy_select() {
    this.init.apply(this, arguments)
};
diy_select.prototype = {
    init: function (opt) {
        this.setOpts(opt);
        this.o = this.getByClass(this.opt.TTContainer, document, 'div'); //容器
        this.b = this.getByClass(this.opt.TTDiy_select_btn); //按钮
        this.t = this.getByClass(this.opt.TTDiy_select_txt); //显示
        this.l = this.getByClass(this.opt.TTDiv_select_list); //列表容器
        this.ipt = this.getByClass(this.opt.TTDiy_select_input); //列表容器
        this.lengths = this.o.length;
        this.showSelect();
    },
    addClass: function (o, s) //添加class
    {
        o.className = o.className ? o.className + ' ' + s : s;
    },
    removeClass: function (o, st) //删除class
    {
        var reg = new RegExp('\\b' + st + '\\b');
        o.className = o.className ? o.className.replace(reg, '') : '';
    },
    addEvent: function (o, t, fn) //注册事件
    {
        return o.addEventListener ? o.addEventListener(t, fn, false) : o.attachEvent('on' + t, fn);
    },
    showSelect: function () //显示下拉框列表
    {
        var This = this;
        var iNow = 0;
        this.addEvent(document, 'click', function () {
            for (var i = 0; i < This.lengths; i++) {
                This.l[i].style.display = 'none';
            }
        })
        for (var i = 0; i < this.lengths; i++) {
            this.l[i].index = this.b[i].index = this.t[i].index = i;
            this.t[i].onclick = this.b[i].onclick = function (ev) {
                var e = window.event || ev;
                var index = this.index;
                This.item = This.l[index].getElementsByTagName('li');

                This.l[index].style.display = This.l[index].style.display == 'block' ? 'none' : 'block';
                for (var j = 0; j < This.lengths; j++) {
                    if (j != index) {
                        This.l[j].style.display = 'none';
                    }
                }
                This.addClick(This.item);
                e.stopPropagation ? e.stopPropagation() : (e.cancelBubble = true); //阻止冒泡
            }
        }
    },
    addClick: function (o) //点击回调函数
    {

        if (o.length > 0) {
            var This = this;
            for (var i = 0; i < o.length; i++) {
                o[i].onmouseover = function () {
                    This.addClass(this, This.opt.TTFcous);
                }
                o[i].onmouseout = function () {
                    This.removeClass(this, This.opt.TTFcous);
                }
                o[i].onclick = function () {
                    var index = this.parentNode.index; //获得列表
                    This.t[index].innerHTML = This.ipt[index].value = this.innerHTML.replace(/^\s+/, '').replace(/\s+&/, '');
                    This.t[index].getElementsByTagName('span').innerHTML = This.ipt[index].getElementsByTagName('span').value = this.innerHTML.replace(/^\s+/, '').replace(/\s+&/, '');
                    This.l[index].style.display = 'none';
                }
            }
        }
    },
    getByClass: function (s, p, t) //使用class获取元素
    {
        var reg = new RegExp('\\b' + s + '\\b');
        var aResult = [];
        var aElement = (p || document).getElementsByTagName(t || '*');

        for (var i = 0; i < aElement.length; i++) {
            if (reg.test(aElement[i].className)) {
                aResult.push(aElement[i])
            }
        }
        return aResult;
    },

    setOpts: function (opt) //以下参数可以不设置  //设置参数
    {
        this.opt = {
            TTContainer: 'diy_select', //控件的class
            TTDiy_select_input: 'diy_select_input', //用于提交表单的class
            TTDiy_select_txt: 'diy_select_txt', //diy_select用于显示当前选中内容的容器class
            TTDiy_select_btn: 'diy_select_btn', //diy_select的打开按钮
            TTDiv_select_list: 'diy_select_list', //要显示的下拉框内容列表class
            TTFcous: 'focus' //得到焦点时的class
        }
        for (var a in opt) //赋值 ,请保持正确,没有准确判断的
        {
            this.opt[a] = opt[a] ? opt[a] : this.opt[a];
        }
    }
};