WordPress源代码——jquery-plugins(jquery.query.js)

1	/**
2	 * jQuery.query - Query String Modification and Creation for jQuery
3	 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
4	 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
5	 * Date: 2009/8/13
6	 *
7	 * @author Blair Mitchelmore
8	 * @version 2.1.7
9	 *
10	 **/
11	new function(settings) { 
12	  // Various Settings
13	  var $separator = settings.separator || '&';
14	  var $spaces = settings.spaces === false ? false : true;
15	  var $suffix = settings.suffix === false ? '' : '[]';
16	  var $prefix = settings.prefix === false ? false : true;
17	  var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
18	  var $numbers = settings.numbers === false ? false : true;
19	 
20	  jQuery.query = new function() {
21	    var is = function(o, t) {
22	      return o != undefined && o !== null && (!!t ? o.constructor == t : true);
23	    };
24	    var parse = function(path) {
25	      var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
26	      while (m = rx.exec(match[2])) tokens.push(m[1]);
27	      return [base, tokens];
28	    };
29	    var set = function(target, tokens, value) {
30	      var o, token = tokens.shift();
31	      if (typeof target != 'object') target = null;
32	      if (token === "") {
33	        if (!target) target = [];
34	        if (is(target, Array)) {
35	          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
36	        } else if (is(target, Object)) {
37	          var i = 0;
38	          while (target[i++] != null);
39	          target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
40	        } else {
41	          target = [];
42	          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
43	        }
44	      } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
45	        var index = parseInt(token, 10);
46	        if (!target) target = [];
47	        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
48	      } else if (token) {
49	        var index = token.replace(/^\s*|\s*$/g, "");
50	        if (!target) target = {};
51	        if (is(target, Array)) {
52	          var temp = {};
53	          for (var i = 0; i < target.length; ++i) {
54	            temp[i] = target[i];
55	          }
56	          target = temp;
57	        }
58	        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
59	      } else {
60	        return value;
61	      }
62	      return target;
63	    };
64	   
65	    var queryObject = function(a) {
66	      var self = this;
67	      self.keys = {};
68	     
69	      if (a.queryObject) {
70	        jQuery.each(a.get(), function(key, val) {
71	          self.SET(key, val);
72	        });
73	      } else {
74	        jQuery.each(arguments, function() {
75	          var q = "" + this;
76	          q = q.replace(/^[?#]/,''); // remove any leading ? || #
77	          q = q.replace(/[;&]$/,''); // remove any trailing & || ;
78	          if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces
79	         
80	          jQuery.each(q.split(/[&;]/), function(){
81	            var key = decodeURIComponent(this.split('=')[0] || "");
82	            var val = decodeURIComponent(this.split('=')[1] || "");
83	           
84	            if (!key) return;
85	           
86	            if ($numbers) {
87	              if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
88	                val = parseFloat(val);
89	              else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
90	                val = parseInt(val, 10);
91	            }
92	           
93	            val = (!val && val !== 0) ? true : val;
94	           
95	            if (val !== false && val !== true && typeof val != 'number')
96	              val = val;
97	           
98	            self.SET(key, val);
99	          });
100	        });
101	      }
102	      return self;
103	    };
104	   
105	    queryObject.prototype = {
106	      queryObject: true,
107	      has: function(key, type) {
108	        var value = this.get(key);
109	        return is(value, type);
110	      },
111	      GET: function(key) {
112	        if (!is(key)) return this.keys;
113	        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
114	        var target = this.keys[base];
115	        while (target != null && tokens.length != 0) {
116	          target = target[tokens.shift()];
117	        }
118	        return typeof target == 'number' ? target : target || "";
119	      },
120	      get: function(key) {
121	        var target = this.GET(key);
122	        if (is(target, Object))
123	          return jQuery.extend(true, {}, target);
124	        else if (is(target, Array))
125	          return target.slice(0);
126	        return target;
127	      },
128	      SET: function(key, val) {
129	        var value = !is(val) ? null : val;
130	        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
131	        var target = this.keys[base];
132	        this.keys[base] = set(target, tokens.slice(0), value);
133	        return this;
134	      },
135	      set: function(key, val) {
136	        return this.copy().SET(key, val);
137	      },
138	      REMOVE: function(key) {
139	        return this.SET(key, null).COMPACT();
140	      },
141	      remove: function(key) {
142	        return this.copy().REMOVE(key);
143	      },
144	      EMPTY: function() {
145	        var self = this;
146	        jQuery.each(self.keys, function(key, value) {
147	          delete self.keys[key];
148	        });
149	        return self;
150	      },
151	      load: function(url) {
152	        var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");
153	        var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
154	        return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash);
155	      },
156	      empty: function() {
157	        return this.copy().EMPTY();
158	      },
159	      copy: function() {
160	        return new queryObject(this);
161	      },
162	      COMPACT: function() {
163	        function build(orig) {
164	          var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
165	          if (typeof orig == 'object') {
166	            function add(o, key, value) {
167	              if (is(o, Array))
168	                o.push(value);
169	              else
170	                o[key] = value;
171	            }
172	            jQuery.each(orig, function(key, value) {
173	              if (!is(value)) return true;
174	              add(obj, key, build(value));
175	            });
176	          }
177	          return obj;
178	        }
179	        this.keys = build(this.keys);
180	        return this;
181	      },
182	      compact: function() {
183	        return this.copy().COMPACT();
184	      },
185	      toString: function() {
186	        var i = 0, queryString = [], chunks = [], self = this;
187	        var encode = function(str) {
188	          str = str + "";
189	          if ($spaces) str = str.replace(/ /g, "+");
190	          return encodeURIComponent(str);
191	        };
192	        var addFields = function(arr, key, value) {
193	          if (!is(value) || value === false) return;
194	          var o = [encode(key)];
195	          if (value !== true) {
196	            o.push("=");
197	            o.push(encode(value));
198	          }
199	          arr.push(o.join(""));
200	        };
201	        var build = function(obj, base) {
202	          var newKey = function(key) {
203	            return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
204	          };
205	          jQuery.each(obj, function(key, value) {
206	            if (typeof value == 'object') 
207	              build(value, newKey(key));
208	            else
209	              addFields(chunks, newKey(key), value);
210	          });
211	        };
212	       
213	        build(this.keys);
214	       
215	        if (chunks.length > 0) queryString.push($hash);
216	        queryString.push(chunks.join($separator));
217	       
218	        return queryString.join("");
219	      }
220	    };
221	   
222	    return new queryObject(location.search, location.hash);
223	  };
224	}(jQuery.query || {}); // Pass in jQuery.query as settings object

联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/12276/

(0)
上一篇 2024年 7月 2日 上午10:19
下一篇 2024年 7月 2日 上午11:01

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信
为方便全球用户注册登录,我们已取消电话登录功能。如遇登录问题,请联系客服协助绑定邮箱。