我使用下面的代码在javascript中获取搜索的查询参数。是否有任何特殊原因导致无法处理多个参数?我似乎无法实现它。
var params = [], hash;
var q = document.URL.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
params.push(hash[1]);
params[hash[0]] = hash[1];
}
}
答案 0 :(得分:1)
您可以使用正则表达式来获取参数。
var test = 'example.com/index.html?param1=foo¶m2=data#icouldhaveahashtoo';
var params = {};
test.replace(/[?&]([^=]+)[=]([^&#]+)/g, function(match, key, value){
params[key] = value;
return '';
});
console.log(params);
答案 1 :(得分:-1)
看起来您的代码运行正常,但是,对于分配了多个值的查询参数(如http://example.com/page.php?param=foo¶m=bar
)的URL,它将无法正常工作。此外,如果其中一个查询字符串参数名称为length
或其他内容,那么可能会对params
数组造成不良影响 - 尝试使用其他容器可能会更好。
var params = [], hash;
var q = 'example.com/index.html?param1=foo¶m2=data'.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
params.push(hash[1]);
params[hash[0]] = hash[1];
}
}
console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0]
我建议将params
变量作为对象,并跳过行params.push(hash[1])
,因为您可以轻松地使用for..in
循环迭代属性,并且顺序参数无论如何都不重要。如果特定名称的参数有多个值,则该参数的值将是一个数组。例如,?param=foo¶m=bar
最终会被解析为{ param: ["foo", "bar"] }
。