Javascript 使用jQuery从URL获取querystring

Javascript 使用jQuery从URL获取querystring,javascript,jquery,query-string,Javascript,Jquery,Query String,我有以下网址: http://www.mysite.co.uk/?location=mylocation1 我需要将location的值从URL中获取到一个变量中,然后在jQuery代码中使用它: var thequerystring = "getthequerystringhere" $('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500);

我有以下网址:

http://www.mysite.co.uk/?location=mylocation1
我需要将
location
的值从URL中获取到一个变量中,然后在jQuery代码中使用它:

var thequerystring = "getthequerystringhere"

$('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500);
如何使用JavaScript或jQuery获取该值?

来自:

这就是您需要的:)

以下代码将返回包含URL参数的JavaScript对象:

// 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;
}
此代码将返回:

{
    "me"    : "myValue",
    "name2" : "SomeOtherValue"
}
你可以做到:

var me = getUrlVars()["me"];
var name2 = getUrlVars()["name2"];
看看这个

可以使用该方法设置动画:

即:


一个简单的方法是使用jQuery和纯JavaScript,只需在Chrome或Firefox中查看您的控制台即可查看输出

  var queries = {};
  $.each(document.location.search.substr(1).split('&'),function(c,q){
    var i = q.split('=');
    queries[i[0].toString()] = i[1].toString();
  });
  console.log(queries);
我们这样做

String.prototype.getValueByKey = function (k) {
    var p = new RegExp('\\b' + k + '\\b', 'gi');
    return this.search(p) != -1 ? decodeURIComponent(this.substr(this.search(p) + k.length + 1).substr(0, this.substr(this.search(p) + k.length + 1).search(/(&|;|$)/))) : "";
};

要从当前URL检索整个查询字符串(以
字符开头),可以使用

location.search

例如:

//URL=https://example.com?a=a%20a&b=b123
console.log(location.search);//打印“?a=a%20a&b=b123”
关于检索特定的querystring参数,尽管类类似和存在,但Internet Explorer目前不支持它们,可能应该避免使用它们。相反,您可以尝试以下方法:

/**
*接受URL或querystring并返回关联的对象
*每个querystring参数都将设置为其值。
*
*如果未找到querystring参数,则返回空对象。
*/
函数getUrlParams(urlOrQueryString){
如果((i=urlOrQueryString.indexOf('?'))>=0){
常量queryString=urlOrQueryString.substring(i+1);
如果(查询字符串){
返回_mapUrlParams(queryString);
} 
}
返回{};
}
/**
*`getUrlParams()的帮助函数`
*将querystring参数生成为对象映射的值。
*
*@param queryString{string}-完整的queryString,不带前导“?”。
*/
函数_mapUrlParams(查询字符串){
返回查询字符串
.split(“&”)
.map(函数(keyValueString){return keyValueString.split('=')})
.reduce(函数(urlparms,[键,值]){
if(Number.isInteger(parseInt(value))&&parseInt(value)==value){
urlParams[key]=parseInt(值);
}否则{
urlParams[key]=decodeURI(值);
}
返回URL参数;
}, {});
}
您可以像这样使用上述选项:

//使用location.search
设urlparms=geturlparms(location.search);//假设location.search=“?a=1&b=2b2”
console.log(urlparms);//打印{“a”:1,“b”:“2b2”}
//使用URL字符串
常量url=https://example.com?a=A%20A&b=1';
urlParams=getUrlParams(url);
console.log(urlparms);//打印{“a”:“a a”,“b”:1}
//要检查参数是否存在,只需执行以下操作:
如果(urlParams.hasOwnProperty('parameterName'){
console.log(urlparms.parameterName);
}

请注意,解决方案不会取消参数值的编码…而且似乎也不会显式处理url中的#值?我建议改为像@Steve didbad answer一样。不会处理片段。@Rory,yes:This:“”将为您提供{“foo”:“bar#topic”}.这就是为什么可怜的家伙要求一个著名的库的解决方案,大概是希望找到一个解决方案,这个解决方案已经在它上面做了一些测试,并且涵盖了所有的基础(我是说这是他希望找到的,而不是说jQuery一定会提供它)。您应该修改代码以使用window.location.search,而不是对window.location.hrefad进行切片。另外,它返回一个对象-JavaScript没有关联数组。并且打开大括号应该与JavaScript中的表达式位于同一行。这是可移植的吗?这不会从url字符串返回搜索字符串。它只是返回当前页面的当前地址栏搜索字符串值。@Cheezmeister:
位置。搜索在Chrome、Firefox和IE10+中工作。可能在IE9和更低版本中也工作,但我手头上没有。Dwight:window.location.search返回查询字符串。在控制台中尝试,您将看到
?a=b&c=d
。仍然有一点问题拉取location.search后要做的工作。不过,这是到达一半的最快方法。您需要删除“?”并在“&”上拆分,然后在“=”上拆分每个结果。使用URLSearchParams。更多详细信息:例如URL有两个参数?id=123&category=abc var urlParams=new URLSearchParams(location.search)var id=urlParams.get('id');var cat=urlParams.get('category');您可能希望在途中删除+和decodeURIComponent…并使用window.location.search而不是使用window.location.search!请注意,如果您希望处理空/空querystring元素,则需要添加一个“if(i[0].length>0”)…block…而且,我不敢相信这需要5行javascript来完成。现在是哪一年?你不应该在“=”上拆分,在任何键/值对的值中有第二个等号在技术上是可以的。--只有你遇到的第一个等号(每个键/值对)应该被视为分隔符。(此外,等号不是严格要求的;可能有一个没有值的键。)此解决方案不考虑查询中的数组,例如filters[class]=Gym我认为人们不会将字符串对象与其中有查询字符串值相关联。可能会有所帮助1。
var locationValue=(新URL(location.href)).searchParams.get(“位置”)
  var queries = {};
  $.each(document.location.search.substr(1).split('&'),function(c,q){
    var i = q.split('=');
    queries[i[0].toString()] = i[1].toString();
  });
  console.log(queries);
String.prototype.getValueByKey = function (k) {
    var p = new RegExp('\\b' + k + '\\b', 'gi');
    return this.search(p) != -1 ? decodeURIComponent(this.substr(this.search(p) + k.length + 1).substr(0, this.substr(this.search(p) + k.length + 1).search(/(&|;|$)/))) : "";
};
location.search