http://safalra.com/web-design/javascript/parsing-query-strings/的 parseQueryString有一些错误:
- 多个
+
s 不替换为空格。
- 多个未转义的等号会导致内容丢失。
- 空输入会产生一个带有键“”的对象。
- 多个空键不会被丢弃
在下面的函数中,上面的错误已经被删除,并且已经在 Firefox 3、Internet Explorer 7、Opera 9 和 Google Chrome 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";