欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jquery.params.js源码分享

程序员文章站 2022-04-17 22:27:20
jquery.params.js 源码 2018年10月09日 09:31:10 zerone羽 数:2 标签: javascript jquery 个人分类: 脚本 /** * jquery.q...

    jquery.params.js 源码

    2018年10月09日 09:31:10 zerone羽 数:2 标签: javascript jquery 个人分类: 脚本 /**
    * jquery.query - query string modification and creation for jquery
    * written by blair mitchelmore (blair dot mitchelmore at gmail dot com)
    * licensed under the wtfpl (http://sam.zoy.org/wtfpl/).
    * date: 2009/8/13
    *
    * @author blair mitchelmore
    * @version 2.1.7
    *
    **/
    new function (settings) {
    // various settings
    var $separator = settings.separator || '&';
    var $spaces = settings.spaces === false false : true;
    var $suffix = settings.suffix === false '' : '[]';
    var $prefix = settings.prefix === false false : true;
    var $hash = $prefix settings.hash === true "#" : "" : "";
    var $numbers = settings.numbers === false false : true;

     

    jquery.query = new function () {
    var is = function (o, t) {
    return o != undefined && o !== null && (!!t o.constructor == t : true);
    };
    var parse = function (path) {
    var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])$/.exec(path), base = match[1], tokens = [];
    while (m = rx.exec(match[2])) tokens.push(m[1]);
    return [base, tokens];
    };
    var set = function (target, tokens, value) {
    var o, token = tokens.shift();
    if (typeof target != 'object') target = null;
    if (token === "") {
    if (!target) target = [];
    if (is(target, array)) {
    target.push(tokens.length == 0 value : set(null, tokens.slice(0), value));
    } else if (is(target, object)) {
    var i = 0;
    while (target[i++] != null);
    target[--i] = tokens.length == 0 value : set(target[i], tokens.slice(0), value);
    } else {
    target = [];
    target.push(tokens.length == 0 value : set(null, tokens.slice(0), value));
    }
    } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
    var index = parseint(token, 10);
    if (!target) target = [];
    target[index] = tokens.length == 0 value : set(target[index], tokens.slice(0), value);
    } else if (token) {
    var index = token.replace(/^\s*|\s*$/g, "");
    if (!target) target = {};
    if (is(target, array)) {
    var temp = {};
    for (var i = 0; i < target.length; ++i) {
    temp[i] = target[i];
    }
    target = temp;
    }
    target[index] = tokens.length == 0 value : set(target[index], tokens.slice(0), value);
    } else {
    return value;
    }
    return target;
    };

    var queryobject = function (a) {
    var self = this;
    self.keys = {};

    if (a.queryobject) {
    jquery.each(a.get(), function (key, val) {
    self.set(key, val);
    });
    } else {
    jquery.each(arguments, function () {
    var q = "" + this;
    q = q.replace(/^[#]/, ''); // remove any leading || #
    q = q.replace(/[;&]$/, ''); // remove any trailing & || ;
    if ($spaces) q = q.replace(/[+]/g, ' '); // replace +'s with spaces

    jquery.each(q.split(/[&;]/), function () {
    var key = decodeuricomponent(this.split('=')[0] || "");
    var val = decodeuricomponent(this.split('=')[1] || "");

    if (!key) return;

    if ($numbers) {
    if (/^[+-][0-9]+\.[0-9]*$/.test(val)) // simple float regex
    val = parsefloat(val);
    else if (/^[+-][0-9]+$/.test(val)) // simple int regex
    val = parseint(val, 10);
    }

    val = (!val && val !== 0) true : val;

    if (val !== false && val !== true && typeof val != 'number')
    val = val;

    self.set(key, val);
    });
    });
    }
    return self;
    };

    queryobject.prototype = {
    queryobject: true,
    has: function (key, type) {
    var value = this.get(key);
    return is(value, type);
    },
    get: function (key) {
    if (!is(key)) return this.keys;
    var parsed = parse(key), base = parsed[0], tokens = parsed[1];
    var target = this.keys[base];
    while (target != null && tokens.length != 0) {
    target = target[tokens.shift()];
    }
    return typeof target == 'number' target : target || "";
    },
    get: function (key) {
    var target = this.get(key);
    if (is(target, object))
    return jquery.extend(true, {}, target);
    else if (is(target, array))
    return target.slice(0);
    return target;
    },
    set: function (key, val) {
    var value = !is(val) null : val;
    var parsed = parse(key), base = parsed[0], tokens = parsed[1];
    var target = this.keys[base];
    this.keys[base] = set(target, tokens.slice(0), value);
    return this;
    },
    set: function (key, val) {
    return this.copy().set(key, val);
    },
    remove: function (key) {
    return this.set(key, null).compact();
    },
    remove: function (key) {
    return this.copy().remove(key);
    },
    empty: function () {
    var self = this;
    jquery.each(self.keys, function (key, value) {
    delete self.keys[key];
    });
    return self;
    },
    load: function (url) {
    var hash = url.replace(/^.*[#](.+)(:\.+)$/, "$1");
    var search = url.replace(/^.*[](.+)(:#.+)$/, "$1");
    return new queryobject(url.length == search.length '' : search, url.length == hash.length '' : hash);
    },
    empty: function () {
    return this.copy().empty();
    },
    copy: function () {
    return new queryobject(this);
    },
    compact: function () {
    function build(orig) {
    var obj = typeof orig == "object" is(orig, array) [] : {} : orig;
    if (typeof orig == 'object') {
    function add(o, key, value) {
    if (is(o, array))
    o.push(value);
    else
    o[key] = value;
    }
    jquery.each(orig, function (key, value) {
    if (!is(value)) return true;
    add(obj, key, build(value));
    });
    }
    return obj;
    }
    this.keys = build(this.keys);
    return this;
    },
    compact: function () {
    return this.copy().compact();
    },
    tostring: function () {
    var i = 0, querystring = [], chunks = [], self = this;
    var encode = function (str) {
    str = str + "";
    if ($spaces) str = str.replace(/ /g, "+");
    return encodeuricomponent(str);
    };
    var addfields = function (arr, key, value) {
    if (!is(value) || value === false) return;
    var o = [encode(key)];
    if (value !== true) {
    o.push("=");
    o.push(encode(value));
    }
    arr.push(o.join(""));
    };
    var build = function (obj, base) {
    var newkey = function (key) {
    return !base || base == "" [key].join("") : [base, "[", key, "]"].join("");
    };
    jquery.each(obj, function (key, value) {
    if (typeof value == 'object')
    build(value, newkey(key));
    else
    addfields(chunks, newkey(key), value);
    });
    };

    build(this.keys);

    if (chunks.length > 0) querystring.push($hash);
    querystring.push(chunks.join($separator));

    return querystring.join("");
    }
    };

    return new queryobject(location.search, location.hash);
    };
    } (jquery.query || {}); // pass in jquery.query as settings object