zoukankan      html  css  js  c++  java
  • JS可复用的多条件筛选插件

    这是最近公司的一个系统需要用到的筛选功能,为了方便日后维护迭代升级,功能的增加,我写了一个插件,支持自定义模块、自定义默认显示几行,超出后出现更多按钮以及是否显示确定按钮, 不管一个页面中有多少个筛选模块,都可复用,只需要后台传给json数据,操作后通过回调函数实时返给后台同样的数据格式,以达到数据、表现、操作的分离。

    这个插件使用非常方便,支持自定义模块、自定义默认显示几行,超出后出现更多按钮以及是否显示确定按钮等等功能。

    下面直接上代码:

    * @Author:虾兵  @Blog:http://ddbing.com/
    * @param   options: 前台传过来的参数,格式如:
                {
                title:null,
                pid:'screen-wrap',
                cid:'platform',
                data:null,
                rows: 2,
                ok:true,
                okVal: 'u786Eu5B9A',
                callback:null
                  };。
    * @param   title: 筛选模块标题,默认为空。
    * @param   pid: 筛选模块的父级id,默认id为 screen-wrap。
    * @param   cid: 筛选模块id,以区分多个筛选模块的情况,默认id为 platform,代表平台。
    * @param   data: 后台传过来的数据,格式如:
                [
                    {"id":"27","name":"6a818a"},
                    {"id":"38","name":"6a818b"}
                ];。
    * @param   ok: 是否显示确定按钮,默认显示为:true
    * @param   okVal: 确定按钮的文字,默认为:确定。
    * @param   rows: 默认显示多少行,超出出现 '更多' 按钮,默认为2行。
    * @param   callback: 回调函数,返回选中的数据,格式JSON,撤销全部返回空数组[]。
    */
    ;(function ($, window, document, undefined) {
     
        var QueryScreen = function(options){
                this.opts = $.extend({},this.defaults,options);
                this.arrSelect = [];
            };
     
        QueryScreen.prototype = {
            constructor:QueryScreen,
            init: function(){
                var that = this, opts = that.opts, pid = opts.pid, temp = that.getTemp();
                $('#'+pid).append(temp);
                that.handleRows()
                    .handleMore()
                    .handleList()
                    .selectAll();
            },
            //处理行及是否显示更多按钮
            handleRows: function(){
                var that = this, opts = that.opts, _$cid = $('#'+opts.cid), rows = opts.rows, nums = 6*rows, dataLen = opts.data.length;
                if ( dataLen-nums <= 0 ) {
                    _$cid.find('.more').addClass('hide');
                }else{
                    nums = nums-1;
                    _$cid.find('.lists li:gt('+nums+')').addClass('hide');
                };
                return that;
            },
            //处理更多按钮
            handleMore: function(){
                var that = this, opts = that.opts, _$cid = $('#'+opts.cid), rows = opts.rows, nums = 6*rows-1;
                _$cid.find('.more').children('a').on('click'function(){
                    var t = $(this);
                    if(t.hasClass('up')){
                        t.removeClass('up');
                        _$cid.find('.lists li:gt('+nums+')').slideUp('fast');
                    }else{
                        t.addClass('up');
                        _$cid.find('.lists li').slideDown('fast');
                    }
                });
                return that;
            },
            //处理点击选择选项后
            handleList: function(){
                var that = this, opts = that.opts, _$cid = $('#'+opts.cid), _$lists = _$cid.find('li a'), arrSelect = that.arrSelect, dataLen = opts.data.length;
                var Selected = function (id,name){
                    this.id = id;
                    this.name = name;
                };
                _$lists.on('click'function(){
                    var t = $(this), dataId, name, activeLen = _$cid.find('.lists').find('.active').length + 1;
                    dataId = $.trim(t.attr('data-id'));
                    name = $.trim(t.text());
                    if(t.hasClass('active')){
                        $.each(arrSelect, function(key,value){
                            if (value && value.id && value.id == dataId) {
                                arrSelect.splice(key,1);
                            };
                        });
                        t.removeClass('active');
                        _$cid.find('.handler a').eq(0).removeClass('active');
                        that.callback(arrSelect);
                    }else{
                        t.addClass('active');
                        arrSelect.push(new Selected(dataId,name));
                        if (activeLen === dataLen) {
                            _$cid.find('.handler a').eq(0).trigger('click');
                        }else{
                            that.callback(arrSelect);
                        };
                    };
                     
                });
                return that;
            },
            //处理全选、撤销全选
            selectAll: function(){
                var that = this, opts = that.opts, _$cid = $('#'+opts.cid), _$lists = _$cid.find('li a'), _$a = _$cid.find('.handler a'),arrSelect = that.arrSelect;
                _$a.eq(0).on('click'function(){
                    var t = $(this);
                    t.addClass('active');
                    _$lists.addClass('active');
                    that.callback(-1);
                });
                _$a.eq(1).on('click',function(){
                    _$lists.removeClass('active');
                    arrSelect.length = 0;
                    that.callback([]);
                    _$lists.removeClass('active');
                    _$a.eq(0).removeClass('active');
                });
                return that;
            },
            //选择后的回调数据
            callback: function(data){
                var that = this, opts = that.opts,_data = opts.data,arrSelect=this.arrSelect,json_data = JSON.stringify(this.arrSelect),all_data=JSON.stringify([{'id':'-1','name':'全部'}]);
                if ('function' === typeof opts.callback) {
                    if (data === -1) {
                        opts.callback(all_data);
                        arrSelect.length = 0;
                        $.each(_data,function(i,val){
                            arrSelect.push({'id':val.id,'name':val.name});
                        });
                    }else{
                        opts.callback(json_data);
                    }
                };
                return that;
            },
            //处理模板
            getTemp: function(){
                var that = this, temp = '', dataTemp = that.dataTemp(), opts = that.opts, okTemp = that.okTemp(), title = opts.title;
                temp += ''
                            +''+ title +'全选撤销全部'
                            +''
                                +''
                                    +''+ dataTemp +''
                                +''
                                +''
                                    +'更多'
                                +''
                            +''
                            + okTemp
                        +'';
                return temp;
            },
            //处理数据模板
            dataTemp: function(){
                var temp = '', opts = this.opts, data = opts.data;
                $.each(data, function(key,value){
                    temp += ''+ value.name +'';
                });
                return temp;
            },
            //处理是否显示确定按钮
            okTemp: function(){
                var temp = '', opts = this.opts, isOk = opts.ok, okVal = opts.okVal;
                if(isOk){
                    temp += ''
                                +''+ okVal +''
                            +'';
                };
                return temp;
            },
            //默认参数配置
            defaults: function(){
                var config = {
                    title:null,
                    pid:'screen-wrap',
                    cid:'platform',
                    data:null,
                    rows: 2,
                    ok:true,
                    okVal: 'u786Eu5B9A',
                    callback:null
                };
                return config;
            }(),
        };
        window.QueryScreen = QueryScreen;
    }(jQuery, window, document));

    这个插件你可以用到你网站的任何地方,商业非商业都行,不过恳请仁兄使用时保留备注或者注明代码来源,以对我写代码的鼓励及脑细胞的补偿,也方便日后迭代更新。使用时样式皮肤自行美化。

  • 相关阅读:
    PyQt5--Buttons
    PyQt5--Position
    PyQt5--ShowWindowCenter
    PyQt5--MessageBox
    PyQt5--CloseWindow
    PyQt5--ShowTips
    PyQt5---ChangeIcon
    PyQt5---firstwindow
    PyQt5--StatusBar
    PyQt5 的几个核心模块作用
  • 原文地址:https://www.cnblogs.com/liqingbo/p/4824440.html
Copyright © 2011-2022 走看看