当前位置: 移动技术网 > IT编程>网页制作>CSS > jquery.params.js源码分享

jquery.params.js源码分享

2018年10月27日  | 移动技术网IT编程  | 我要评论

    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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网