let getQueryParameters = function(str){
return (str || document.location.search).replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
}
代码值得细看,正则的运用,返回值,逗号操作符,this的绑定....
如果URL是http://fanyi.baidu.com/translate?aldtype=16047&query=require&keyfrom=baidu&smartresult=dict&lang=auto2zh
执行:
getQueryParameters();
得到:
{
aldtype: "16047",
query: "require",
keyfrom: "baidu",
smartresult: "dict",
lang: "auto2zh"
}
上面代码用到了Array.prototype.map(),浏览器兼容只有IE9+。在此代码基础之上又改写了一个兼容低版本的:
var getQueryParameters = function(str){
var ary = (str || document.location.search).replace(/(^\?)/,'').split("&");
var obj = {};
if( !!ary.map ) return ary.map(function(n){return n = n.split("="),this[n[0]] = decodeURIComponent( n[1] ),this}.bind({}))[0];
for(var i = 0,len = ary.length; i < len ;i++){
var arrays = ary[i].split("=");
obj[arrays[0]] = decodeURIComponent( arrays[1] );
}
return obj;
};