是否有任何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库可以执行此操作?
我为类似这样的需求编写了一个使用纯JavaScript字符串操作的函数。
"http://www.google.lk/?Name=John&Age=20&Gender=Male"
function queryize(sampleurl){
var tokens = url.split('?')[1].split('&');
var result = {};
for(var i=0; i<tokens.length; i++){
result[tokens[i].split('=')[0]] = tokens[i].split('=')[1];
}
return result;
}
使用方法:
queryize(window.location.href)['Name'] //returns John
queryize(window.location.href)['Age'] //returns 20
queryize(window.location.href)['Gender'] //returns Male
?
的方式外,基本上与你之前两个答案相同? - Rup我喜欢保持简单、易读和精简。
function searchToObject(search) {
var pairs = search.substring(1).split("&"),
obj = {}, pair;
for (var i in pairs) {
if (pairs[i] === "") continue;
pair = pairs[i].split("=");
obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
return obj;
}
searchToObject(location.search);
示例:
searchToObject('?query=myvalue')['query']; // spits out: 'myvalue'
_.object(window.location.search.replace(/(^\?)/, '').split('&').map(keyVal => keyVal.split('=')));
好的,既然大家都忽略了我的实际问题,呵呵,我也来发一个!这是我拥有的:
location.querystring = (function() {
// The return is a collection of key/value pairs
var queryStringDictionary = {};
// Gets the query string, starts with '?'
var querystring = unescape(location.search);
// document.location.search is empty if no query string
if (!querystring) {
return {};
}
// Remove the '?' via substring(1)
querystring = querystring.substring(1);
// '&' seperates key/value pairs
var pairs = querystring.split("&");
// Load the key/values of the return collection
for (var i = 0; i < pairs.length; i++) {
var keyValuePair = pairs[i].split("=");
queryStringDictionary[keyValuePair[0]] = keyValuePair[1];
}
// Return the key/value pairs concatenated
queryStringDictionary.toString = function() {
if (queryStringDictionary.length == 0) {
return "";
}
var toString = "?";
for (var key in queryStringDictionary) {
toString += key + "=" + queryStringDictionary[key];
}
return toString;
};
// Return the key/value dictionary
return queryStringDictionary;
})();
还有测试:
alert(window.location.querystring.toString());
for (var key in location.querystring) {
alert(key + "=" + location.querystring[key]);
}
话说,JavaScript并不是我的母语。
无论如何,我正在寻找一个已经编写好的JavaScript库(例如jQuery、Prototype)。
String::to_query = ->
[result, re, d] = [{}, /([^&=]+)=([^&]*)/g, decodeURIComponent]
while match = re.exec(if @.match /^\?/ then @.substring(1) else @)
result[d(match[1])] = d match[2]
result
你可以轻松使用以下方法来获取你需要的内容:
location.search.to_query()['my_param']
这里的优势是面向对象的接口(而不是函数式的),并且它可以在任何字符串上执行(而不仅仅是location.search)。
如果您已经在使用JavaScript库,则此函数可能已经存在。例如,这里是Prototype的版本。