我有一个带有一些 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 做到这一点?
JavaScript本身没有内置任何用于处理查询字符串参数的内容。
在(现代)浏览器中运行的代码可以使用该URL
对象(它是浏览器提供给 JS 的 API 的一部分):
var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);
对于较旧的浏览器(包括 Internet Explorer),您可以使用此 polyfill或此答案的原始版本中早于 的代码URL
:
您可以访问location.search
,它将为您提供从?
字符到 URL 的结尾或片段标识符 (#foo) 的开头,以先到者为准。
然后你可以用这个解析它:
function parse_query_string(query) {
var vars = query.split("&");
var query_string = {};
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
var key = decodeURIComponent(pair[0]);
var value = decodeURIComponent(pair[1]);
// If first entry with this name
if (typeof query_string[key] === "undefined") {
query_string[key] = decodeURIComponent(value);
// If second entry with this name
} else if (typeof query_string[key] === "string") {
var arr = [query_string[key], decodeURIComponent(value)];
query_string[key] = arr;
// If third or later entry with this name
} else {
query_string[key].push(decodeURIComponent(value));
}
}
return query_string;
}
var query_string = "a=1&b=3&c=m2-m3-m4-m5";
var parsed_qs = parse_query_string(query_string);
console.log(parsed_qs.c);
您可以使用以下命令从当前页面的 URL 获取查询字符串:
var query = window.location.search.substring(1);
var qs = parse_query_string(query);
我见过的大多数实现都错过了对名称和值进行 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( name, url ) {
if (!url) url = location.href;
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( url );
return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')
这是一种仅检查一个参数的简单方法:
示例网址:
http://myserver/action?myParam=2
示例 JavaScript:
var myParam = location.search.split('myParam=')[1]
如果 URL 中存在“myParam”...变量 myParam 将包含“2”,否则它将是未定义的。
也许你想要一个默认值,在这种情况下:
var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';
更新:这效果更好:
var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
var captured = /myParam=([^&]+)/.exec(url)[1]; // Value is in [1] ('384' in our case)
var result = captured ? captured : 'myDefaultValue';
即使 URL 充满参数,它也能正常工作。
浏览器供应商已经通过 URL 和 URLSearchParams 实现了一种本地方式来做到这一点。
let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c')); // outputs "m2-m3-m4-m5"
目前支持 Firefox、Opera、Safari、Chrome 和 Edge。有关浏览器支持的列表,请参见此处。
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL