考虑这个字符串:#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' }
最佳答案
你可以使用这个函数:
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;
}
这取自 larger set of functionality on github 的 .parseParms()
方法我写的是将 URL 解析成它的所有部分。
输入是以下形式的字符串:
"aaa=1&bbb=99&name=Bob"
它会返回一个像这样的对象:
{aaa: 1, bbb: 99, name: "Bob"}
因此,如果字符串中除了上述参数之外还有其他内容,那么您需要先删除这些内容,然后再调用此函数。
工作演示:
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"));
关于javascript - 将URL哈希参数转换为对象(键值对)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481979/