是否有任何 JavaScript 库可以根据查询字符串、ASP.NET
样式制作字典?
可以使用的东西,如:
var query = window.location.querystring["query"]?
“查询字符串”是否在.NET
领域之外被称为其他东西?为什么不location.search
分成键/值集合?
编辑:我已经编写了自己的函数,但是任何主要的 JavaScript 库都这样做吗?
是否有任何 JavaScript 库可以根据查询字符串、ASP.NET
样式制作字典?
可以使用的东西,如:
var query = window.location.querystring["query"]?
“查询字符串”是否在.NET
领域之外被称为其他东西?为什么不location.search
分成键/值集合?
编辑:我已经编写了自己的函数,但是任何主要的 JavaScript 库都这样做吗?
您可以从location.search属性中提取键/值对,该属性具有 URL后面的部分?符号,包括?象征。
function getQueryString() {
var result = {}, queryString = location.search.slice(1),
re = /([^&=]+)=([^&]*)/g, m;
while (m = re.exec(queryString)) {
result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
return result;
}
// ...
var myParam = getQueryString()["myParam"];
var queryDict = {}
location.search.substr(1).split("&").forEach(function(item) {
queryDict[item.split("=")[0]] = item.split("=")[1]
})
对于查询字符串,?a=1&b=2&c=3&d&e
它返回:
> queryDict
a: "1"
b: "2"
c: "3"
d: undefined
e: undefined
请参阅如何在 JavaScript 中获取查询字符串值的原始答案?
"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
找到这篇文章后,当我审视自己时,我想我应该补充一点,我认为投票最多的解决方案并不是最好的。它不处理数组值(例如 ?a=foo&a=bar - 在这种情况下,我希望得到 a 返回 ['foo', 'bar'])。据我所知,它还没有考虑编码值 - 例如十六进制字符编码,其中 %20 表示空格(例如:?a=Hello%20World)或用于表示空格的加号(例如: ?a=Hello+World)。
Node.js 为查询字符串解析提供了看起来非常完整的解决方案。将其取出并在您自己的项目中使用很容易,因为它具有相当好的隔离性并获得许可。
它的代码可以在这里查看:https : //github.com/joyent/node/blob/master/lib/querystring.js
Node 的测试可以在这里看到:https : //github.com/joyent/node/blob/master/test/simple/test-querystring.js我建议用流行的答案尝试其中的一些,看看它是如何处理它们。
我还参与了一个专门添加此功能的项目。它是 Python 标准库查询字符串解析module的一个端口。我的叉子可以在这里找到:https : //github.com/d0ugal/jquery.qeeree
或者您可以使用库sugar.js。
来自 Sugarjs.com:
Object.fromQueryString ( str , deep = true )
将 URL 的查询字符串转换为对象。如果 deep 为 false,则转换将只接受浅层参数(即,不接受具有 [] 语法的对象或数组),因为这些不是普遍支持的。
Object.fromQueryString('foo=bar&broken=wear') >{"foo":"bar","broken":"wear"} Object.fromQueryString('foo[]=1&foo[]=2') >{"foo":[1,2]}
例子:
var queryString = Object.fromQueryString(location.search);
var foo = queryString.foo;