考虑这个字符串: #page?param1=a¶m2=b¶m3=c
我一直致力于使用混合应用程序window.location.hash将应用程序路由到正确的页面.通常,这些URL包含散列后的参数.当然,这不是标准,但它是一个很好的解决方案,适用于我们的应用程序.
我需要创建一个函数,它将获取散列中的所有参数并将它们返回到对象中,例如: {param: value}.
我尝试了其他问题解决方案,window.location.search但遗憾的是,当参数在哈希之后时,只返回一个空字符串.
我的尝试看起来像这样:
return JSON.parse('{"' + decodeURI(window.location.hash).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}');
该解决方案取自另一个使用window.location.search但使用window.location.hash不正常的问题,第一个参数(在问号之后)显示为未定义.
如何创建一个可以在对象中返回哈希参数的函数?
上面字符串的期望结果是:
{ param1: 'a', param2: 'b', param3: 'c' }
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 12
你可以使用这个功能:
function parseParms(str) {
var pieces = str.split("&"), data = {}, i, parts;
// process each query pair
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
data[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
这取自我在github上用于解析URL到其所有部分.parseParms()的更大功能集的方法.
输入是以下形式的字符串:
"aaa=1&bbb=99&name=Bob"
Run Code Online (Sandbox Code Playgroud)
它会返回一个这样的对象:
{aaa: 1, bbb: 99, name: "Bob"}
Run Code Online (Sandbox Code Playgroud)
所以,如果除了上面的参数之外你还在字符串中有其他东西,那么在调用这个函数之前你需要先删除它们.
工作演示:
function parseParms(str) {
var pieces = str.split("&"), data = {}, i, parts;
// process each query pair
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
data[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
return data;
}
console.log(parseParms("aaa=1&bbb=99&name=Bob"));Run Code Online (Sandbox Code Playgroud)