js 扩展

该博客主要展示了一系列JavaScript函数,包括loading、loaded、dateFtt等,用于处理加载状态、日期格式化等。同时对jQuery插件如datagrid、combotree、datebox进行了方法扩展和默认值修改,以实现更多功能,如获取当前行数据、查询树节点、日期格式化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function loading(msg, jq) {
    var _1cb = jq || $(document.body);
    if (!_1cb.children("div.datagrid-mask").length) {
        $("<div class=\"datagrid-mask\" style=\"display:block;z-index:9999999\"></div>").appendTo(_1cb);
        var msg = $("<div class=\"datagrid-mask-msg\" style=\"display:block;left:50%;z-index:99999999\"></div>").html(msg || "正在处理...").appendTo(_1cb);
        msg._outerHeight(40);
        msg.css({ marginLeft: (-msg.outerWidth() / 2), lineHeight: (msg.height() + "px") });
        return msg;
    } else {
        return _1cb.children("div.datagrid-mask-msg");
    }
}
function loaded(jq) {
    var _1cc = jq || $(document.body);
    _1cc.children("div.datagrid-mask-msg").remove();
    _1cc.children("div.datagrid-mask").remove();
}


function dateFtt(fmt, date) {
    var o = {
        "M+": date.getMonth() + 1,                 //月份   
        "d+": date.getDate(),                    //日   
        "h+": date.getHours(),                   //小时   
        "m+": date.getMinutes(),                 //分   
        "s+": date.getSeconds(),                 //秒   
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度   
        "S": date.getMilliseconds()             //毫秒   
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

if ($.fn.datagrid) {
    $.extend($.fn.datagrid.methods, {
        currentRowIndex: function (jq, obj) {
            return $(obj).closest("tr.datagrid-row")[0].rowIndex;
        },
        currentRowData: function (jq, obj) {
            var index = $(obj).closest("tr.datagrid-row")[0].rowIndex;
            return jq.datagrid("getRows")[index];
        },
        changeEditor: function (jq, p) {
            return jq.each(function () {
                var dg = $(this);

                var index = p.index;
                if (typeof (index) != "number") {
                    index = $(index).closest("tr.datagrid-row")[0].rowIndex;
                }

                var editor = dg.datagrid('getEditor', { index: index, field: p.field });
                var diveitor = $(editor.target).closest("div.datagrid-cell");
                var editortd = $(editor.target).parent();
                var opts = dg.datagrid("options");
                var _15d, _15e;
                if (typeof p.editor == "string") {
                    _15d = p.editor;
                } else {
                    _15d = p.editor.type;
                    _15e = p.editor.options;
                }
                editortd.empty();
                var _15f = opts.editors[_15d];
                $.data(diveitor[0], "datagrid.editor", { actions: _15f, target: _15f.init(editortd, _15e), field: p.field, type: _15d, oldHtml: editor.oldHtml });
                var row = opts.finder.getRow(dg[0], index);
                var ed = $.data(diveitor[0], "datagrid.editor");
                var initvalue = row[p.field] || (_15e && _15e.value);
                if (initvalue == undefined || initvalue == null)
                    initvalue = "";
                ed.actions.setValue(ed.target, initvalue);
                ed.actions.resize(ed.target, diveitor.width());
            });
        },
        getEditorValue: function (jq, p) {

            var dg = jq;

            var index = p;
            if (typeof (index) != "number") {
                index = $(index).closest("tr.datagrid-row")[0].rowIndex;
            }
            var opts = dg.datagrid("options");
            var tr = opts.finder.getTr(dg[0], index);
            var row = opts.finder.getRow(dg[0], index);

            var _14d = $.extend({}, row);
            tr.find("div.datagrid-editable").each(function () {
                var _14e = $(this).parent().attr("field");
                var ed = $.data(this, "datagrid.editor");
                var t = $(ed.target);
                var _14f = t.data("textbox") ? t.textbox("textbox") : t;
                _14f.triggerHandler("blur");
                var _150 = ed.actions.getValue(ed.target);
                _14d[_14e] = _150;
            });

            return _14d;
        },
        setEditorValue: function (jq, p) {
            return jq.each(function () {
                var dg = $(this);

                var index = p.index;
                if (typeof (index) != "number") {
                    index = $(index).closest("tr.datagrid-row")[0].rowIndex;
                }
                var opts = dg.datagrid("options");
                var tr = opts.finder.getTr(dg[0], index);
                var row = opts.finder.getRow(dg[0], index);
                var value = p.value || {};


                var _14d = $.extend({}, row);
                tr.find("div.datagrid-editable").each(function () {
                    var _14e = $(this).parent().attr("field");
                    if (value[_14e] !== undefined) {
                        var ed = $.data(this, "datagrid.editor");
                        var t = $(ed.target);
                        ed.actions.setValue(ed.target, value[_14e]);
                    }
                });

            });
        },
        getEditorText: function (jq, p) {

            var dg = jq;

            var index = p;
            if (typeof (index) != "number") {
                index = $(index).closest("tr.datagrid-row")[0].rowIndex;
            }
            var opts = dg.datagrid("options");
            var tr = opts.finder.getTr(dg[0], index);
            var row = opts.finder.getRow(dg[0], index);

            var _14d = $.extend({}, row);
            tr.find("div.datagrid-editable").each(function () {
                var _14e = $(this).parent().attr("field");
                var ed = $.data(this, "datagrid.editor");
                var t = $(ed.target);
                var _14f = t.data("textbox") ? t.textbox("textbox") : t;
                //_14f.triggerHandler("blur");
                var _150 = _14f.val();
                _14d[_14e] = _150;
            });

            return _14d;
        }
    });
}
if ($.fn.validatebox) {

    $.extend($.fn.validatebox.defaults.rules, {
        dgltfield: {
            validator: function (value, param) {
                var field = param[0], dg = param[1]; 
                var row = $(dg).datagrid("getEditorText", this);
                var othervalue = row[field] || "";
                param[2] = $(dg).datagrid("getColumnOption", field).title;
                return value<othervalue;
            },
            message: '值必须小于{2}值'
        },
        dggtfield: {
            validator: function (value, param) {
                var field = param[0], dg = param[1];
                var row = $(dg).datagrid("getEditorText", this);
                var othervalue = row[field] || "";
                param[2] = $(dg).datagrid("getColumnOption", field).title;
                return value > othervalue;
            },
            message: '值必须大于{2}值'
        }
    });
}
if ($.fn.combobox) {

    $.extend($.fn.combobox.methods, {
        getSelectedItem: function (jq) {
            var opts = jq.combobox("options");
            var panel = jq.combobox("panel");
            var ret = [];
            panel.find(".combobox-item-selected").each(function () {
                var row = opts.finder.getRow(jq[0], $(this));
                ret.push(row);
            });
            return opts.multiple ? ret : ret[0];
        },
        getSelectedItem_Ensure: function (jq) {
            var item = jq.combobox("getSelectedItem");
            var text = jq.combobox("getText");
            var opts = jq.combobox("options");
            var textf = opts.textField;
            if (opts.multiple)
                return item;
            if (!item)
                return item;
            if (item[textf] != text)
                return null;
            return item;
        }
    });
}


function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}

if ($.fn.combotree) {
    $.extend($.fn.combotree.defaults.keyHandler, {

        query: function (q) {
            var t = $(this).combotree('tree');
            var nodes = t.tree('getChildren');
            for (var i = 0; i < nodes.length; i++) {
                var node = nodes[i];
                if (node.text.toLowerCase().indexOf(q.toLowerCase()) >= 0) {
                    $(node.target).parents().show();
                    $(node.target).show();
                } else {
                    $(node.target).hide();
                }
            }
            var opts = $(this).combotree('options');
            if (!opts.hasSetEvents) {
                opts.hasSetEvents = true;
                var onShowPanel = opts.onShowPanel;
                opts.onShowPanel = function () {
                    var nodes = t.tree('getChildren');
                    for (var i = 0; i < nodes.length; i++) {
                        $(nodes[i].target).show();
                    }
                    onShowPanel.call(this);
                };
                $(this).combo('options').onShowPanel = opts.onShowPanel;
            }
        }
    });

    $.extend($.fn.combotree.defaults, {
        onShowPanel: function () {
            var _c = $(this).combo("panel");

            var _d = _c.find(".tree-node-selected");
            if (_d.length) {
                if (_d.position().top <= 0) {
                    var h = _c.scrollTop() + _d.position().top;
                    _c.scrollTop(h);
                } else {
                    if (_d.position().top + _d.outerHeight() > _c.height()) {
                        var h = _c.scrollTop() + _d.position().top + _d.outerHeight() - _c.height();
                        _c.scrollTop(h);
                    }
                }
            }
        }
    });

    $.extend($.fn.combotree.methods, {
        getSelectedItem: function (jq) {
            var tree = jq.combotree("tree");
            var opts = jq.combotree("options");
            var panel = jq.combotree("panel");
            var ret = [];
            panel.find(".tree-node-selected").each(function () {
                var row = tree.tree("getNode", this);
                ret.push(row);
            });
            return opts.multiple ? ret : ret[0];
        },
        getSelectedItem_Ensure: function (jq) {
            var item = jq.combotree("getSelectedItem");
            var text = jq.combotree("getText");
            var opts = jq.combotree("options");
            if (opts.multiple)
                return item;
            if (!item)
                return item;
            if (item.text != text)
                return null;
            return item;
        }
    });

}

if ($.fn.datebox) {

    $.fn.datebox.defaults.formatter = function (dt) {
        var y = dt.getFullYear();
        var m = dt.getMonth() + 1;
        var d = dt.getDate();
        var opts = null;
        try {
            opts = $(this).datebox("options");
        }
        catch (e) { opts = {}; }
        if (opts.yearmoth)
            return y + '-' + (m < 10 ? '0' + m : m);
        return y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d);
    }
    $.fn.datebox.defaults.parser = function (s) {
        if (!s) return new Date();
        var ss = (s.split('-'));
        var y = parseInt(ss[0], 10);
        var m = parseInt(ss[1], 10);
        var d = parseInt(ss[2], 10);
        d = d || 1;
        if (!isNaN(y) && !isNaN(m) && !isNaN(d)) {
            return new Date(y, m - 1, d);
        } else {
            return new Date();
        }
    }

    //支持月份
    $.fn.datebox.defaults.onShowPanel = function () {
        var opts = null, self = $(this);
        try {
            opts = $(this).datebox("options");
        }
        catch (e) { opts = {}; }
        if (opts.yearmoth) {
            var p = $(this).datebox('panel');
            var span = p.find('span.calendar-text');
            span.trigger('click');
            if (!self.data("initedyearmoth")) {
                self.data("initedyearmoth", true);
                setTimeout(function () {
                    var tds = p.find('div.calendar-menu-month-inner td');
                    tds.click(function (e) {
                        e.stopPropagation();
                        var year = /\d{4}/.exec(span.html())[0]
                        , month = parseInt($(this).attr('abbr'), 10);
                        self.datebox('hidePanel').datebox('setValue', year + '-' + (month < 10 ? '0' + month : month));
                    });
                }, 10);
            }
        }
    }

    $.fn.datebox.defaults.editable = false;
    $.fn.datebox.defaults.icons = [{
        iconCls: 'icon-clear',
        handler: function (e) {
            $(e.data.target).datebox('clear');
        }
    }];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值