我有一个带有一些GET参数的URL,如下所示:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?
我有一个带有一些GET参数的URL,如下所示:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?
当前回答
这里是一个递归解决方案,它没有正则表达式,并且具有最小的变异(只有params对象被变异,我认为这在JS中是不可避免的)。
太棒了,因为它:
是递归的处理多个同名参数处理格式错误的参数字符串(缺少值等)如果“=”在值中,则不中断执行URL解码最后,这太棒了,因为它……啊!!!
代码:
var get_params = function(search_string) {
var parse = function(params, pairs) {
var pair = pairs[0];
var parts = pair.split('=');
var key = decodeURIComponent(parts[0]);
var value = decodeURIComponent(parts.slice(1).join('='));
// Handle multiple parameters of the same name
if (typeof params[key] === "undefined") {
params[key] = value;
} else {
params[key] = [].concat(params[key], value);
}
return pairs.length == 1 ? params : parse(params, pairs.slice(1))
}
// Get rid of leading ?
return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}
var params = get_params(location.search);
// Finally, to get the param you want
params['c'];
其他回答
我一次又一次遇到同样的问题。现在这里的许多用户现在我以我的HAX工作而闻名,
所以我用以下方法来解决:
PHP:
echo "<p style="display:none" id=\"hidden-GET\">".$_GET['id']."</p>";
JS:
document.getElementById("hidden-GET").innerHTML;
简单的HAX但有效。
使用URLSearchParams的超简单方法。
function getParam(param){
return new URLSearchParams(window.location.search).get(param);
}
目前,Chrome、Firefox、Safari、Edge和其他浏览器都支持它。
我见过的大多数实现都错过了URL对名称和值的解码。
下面是一个通用的实用程序函数,它也可以进行正确的URL解码:
function getQueryParams(qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
//var query = getQueryParams(document.location.search);
//alert(query.foo);
function gup() {
var qs = document.location.search;
qs = qs.split('+').join(' ');
var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs))
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
return params;
}
像这样使用
var params = gup()
然后
params.param1
params.param2
或者如果您不想重新发明URI解析轮,请使用URI.js
要获取名为foo的参数的值,请执行以下操作:
new URI((''+document.location)).search(true).foo
它的作用是
将document.location转换为字符串(它是一个对象)将该字符串输入到URI.js的URI类构造器调用search()函数以获取url的搜索(查询)部分(传递true告诉它输出一个对象)访问结果对象的foo属性以获取值
这是一把小提琴。。。。http://jsfiddle.net/m6tett01/12/