在http://safalra.com/web-design/javascript/parsing-query-strings/的parseQueryString有一些错误:
- 多
+
s的不带空格代替。
- 多个未转义的等号会导致内容丢失。
- 空输入结果在带有键“”的对象中。
- 多个空键不被丢弃
在下面的功能,虫子上述已被删除,它已在Firefox 3,因特网浏览器,歌剧 9和谷歌浏览器1进行了测试。
function parseQueryString(input){
var out={}, decode=decodeURIComponent, s=input||location.search||"",
kv=("?"===s.charAt(0)?s.slice(1):s).replace(/\+/g," ").split(/[&;]/g),
idx=-1,key,value;
while(++idx<kv.length){
if (kv[idx]==="") continue;
value=kv[idx].split("=");
key=decode(value.shift());
(out[key]||(out[key]=[])).push(decode(value.join("=")));
}
return out;
}
上面的函数(和原始)期望仅URL的查询部分:从问号到字符串的末尾或第一#。如果没有提供参数,它将自动从浏览器当前位置的URL中提取查询部分。
结果是具有查询字符串中的键的对象,并且所有键的值都是所有值的数组。
var data = parseQueryString("?a=test1&a=test2&b=test3");
//Result of data:
{
a:["test1","test2"],
b:["test3"]
}
一些例子:
// Alert all values of the a key:
if (data.a && data.a.length) {
for (var i=0;i<data.a.length;++i)
alert(data.a[i]);
}
// Get the first value of a-key:
var value_a = data.a && data.a[0];
// Get the first value of a-key or default:
var value_a = data.a && data.a[0] || "default";