我有一个带有一些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执行此操作?
当前回答
来源
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')
其他回答
JavaScript本身没有内置处理查询字符串参数的功能。
在(现代)浏览器中运行的代码可以使用URL对象(Web API)。URL也由Node.js实现:
//如果您想使用,可以从window.location.href获取url_string//当前页面的URLvar url_string=“http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5“;var url=新url(url_string);var c=url.searchParams.get(“c”);控制台日志(c);
对于较旧的浏览器(包括Internet Explorer),可以使用此polyfill。
您还可以对URLSearchParams使用一个,并提取查询字符串,以通过window.location.search.substring(1)传递给它。
您也可以使用URL之前的原始版本的代码。上面的polyfill是健壮的,经过了很好的测试,但我强烈建议使用它。
您可以访问location.search,这将从中提供给您?在URL末尾或片段标识符(#foo)的开头(以先到者为准)添加一个字符。
然后,您可以使用以下命令解析它:
函数parse_query_string(查询){var vars=查询.split(“&”);var query_string={};对于(var i=0;i<vars.length;i++){var pair=vars[i].split(“=”);var key=解码URIComponent(pair.shift());var value=decodeURIComponent(pair.join(“=”));//如果第一个条目具有此名称if(query_string[key]类型==“未定义”){query_string[key]=值;//如果第二个条目具有此名称}否则如果(query_string[key]类型==“string”){var arr=[query_string[key],value];query_string[key]=arr;//如果使用此名称的第三个或更高版本条目}其他{query_string[key].push(值);}}返回query_string;}var query_string=“a=1&b=3&c=m2-m3-m4-5”;var parsed_qs=parse_query_string(query_string);控制台日志(parsed_qs.c);
您可以通过以下方式从当前页面的URL获取查询字符串:
var query = window.location.search.substring(1);
var qs = parse_query_string(query);
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
// Usage for URL: http://my.site.com/location?locationId=53cc272c0364aefcb78756cd&shared=false
var id = getUrlVars()["locationId"];
从这里得到:http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
我更喜欢使用可用的资源,而不是重新设计如何解析这些参数。
将URL解析为对象提取搜索参数部分将searchParams从迭代器转换为具有数组扩展的数组。将键值数组缩减为一个对象。
常量url='http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5';const params=[…新URL(URL).searchParams.entries()].reduce((a,c)=>对象.assign(a,{[c[0]]:c[1]}),{})console.log(参数);
这是我的解决方案。正如Andy E在回答这个问题时所建议的那样,如果只是为了获得一个值而重复构建各种正则表达式字符串、运行循环等,对脚本的性能没有好处。因此,我提出了一个更简单的脚本,它在一个对象中返回所有GET参数。您应该只调用它一次,将结果分配给一个变量,然后在将来的任何时候,使用适当的键从该变量中获得您想要的任何值。注意,它还负责URI解码(例如%20),并用空格替换+:
function getUrlQueryParams(url) {
var queryString = url.split("?")[1];
var keyValuePairs = queryString.split("&");
var keyValue = [];
var queryParams = {};
keyValuePairs.forEach(function(pair) {
keyValue = pair.split("=");
queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/\+/g, " ");
});
return queryParams;
}
下面是脚本的一些测试,供您查看:
// Query parameters with strings only, no special characters.
var currentParams = getUrlQueryParams("example.com/foo?number=zero");
alert(currentParams["number"]); // Gives "zero".
// For the URL you stated above...
var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
alert(someParams["c"]); // Gives "m2-m3-m4-m5".
// For a query params with URI encoding...
var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a%20long%20shot&location=Silicon+Valley%2C+USA");
alert(someParams["phrase"]); // Gives "a long shot".
alert(someParams["location"]); // Gives "Silicon Valley, USA".
对于像index.html这样的单参数值?msg=1使用以下代码,
$(window).load(function(){
queryString();
});
function queryString()
{
var queryString = window.location.search.substring(1);
var varArray = queryString.split("="); //eg. index.html?msg=1
var param1 = varArray[0];
var param2 = varArray[1];
}
对于所有参数值,请使用以下代码:,
$(window).load(function(){
queryString();
});
function queryString()
{
var queryString = window.location.search;
var varArray = queryString.split("&");
for (var i=0;i<varArray.length;i++) {
var param = varArray[i].split("=");
//parameter-value pair
}
}