从“GET”参数中获取值(JavaScript)

1727

我有一个带有GET参数的URL,如下所示:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

我需要获取整个 c 的值。我尝试读取URL,但我只得到了 m2 。如何使用JavaScript实现这一点?


9
在发表新回答之前,请考虑已经有50多个回答了。请确保您的回答提供的信息不在现有的答案中。 - janniks
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); - Ali NajafZadeh
1
真是疯狂,一个本应该很简单的JS问题需要50多个答案 :/ - fguillen
63个回答

8

在这里我发布一个例子,但它是使用jQuery编写的。希望能帮助其他人:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990-->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')          // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')   // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});
</script>

1
需要使用url插件:plugins.jquery.com/url - zeta

8

如果您不想重新发明URI解析轮,请使用URI.js

要获取名为foo的参数的值:

new URI((''+document.location)).search(true).foo

这段代码的作用是:

  1. 将document.location转换为字符串(它是一个对象)
  2. 将该字符串提供给URI.js的URI类构造函数
  3. 调用search()函数获取url的搜索(query)部分(传递true告诉它输出一个对象)
  4. 访问结果对象上的foo属性以获取其值

这里有一个相关的fiddle示例.... http://jsfiddle.net/m6tett01/12/


8
另一个建议。
已经有一些好的答案了,但我发现它们过于复杂并且难以理解。这个方法简短明了,返回一个简单的关联数组,其中键名对应于URL中的令牌名称。
我添加了下面带注释版本,供那些想学习的人使用。
请注意,此方法依赖于jQuery ($.each)进行循环,我建议在整个程序中都使用jQuery而不是插入单独的修复程序来支持旧浏览器中不支持的新功能。
编辑:在撰写本文后,我注意到Eric Elliott的答案几乎相同,但它使用forEach,而我通常反对(原因如上所述)。
function getTokens(){
    var tokens = [];
    var query = location.search;
    query = query.slice(1);
    query = query.split('&');
    $.each(query, function(i,value){    
        var token = value.split('=');   
        var key = decodeURIComponent(token[0]);     
        var data = decodeURIComponent(token[1]);
        tokens[key] = data;
    });
    return tokens;
}

注释版本:

function getTokens(){
    var tokens = [];            // new array to hold result
    var query = location.search; // everything from the '?' onward 
    query = query.slice(1);     // remove the first character, which will be the '?' 
    query = query.split('&');   // split via each '&', leaving us an array of something=something strings

    // iterate through each something=something string
    $.each(query, function(i,value){    

        // split the something=something string via '=', creating an array containing the token name and data
        var token = value.split('=');   

        // assign the first array element (the token name) to the 'key' variable
        var key = decodeURIComponent(token[0]);     

        // assign the second array element (the token data) to the 'data' variable
        var data = decodeURIComponent(token[1]);

        tokens[key] = data;     // add an associative key/data pair to our result array, with key names being the URI token names
    });

    return tokens;  // return the array
}

以下示例我们将使用此地址:

http://www.example.com/page.htm?id=4&name=murray

您可以将URL令牌分配给自己的变量:
var tokens = getTokens();

然后,可以通过如下方式按名称引用每个URL令牌:
document.write( tokens['id'] );

这将打印出"4"。
您也可以直接从函数中引用令牌名称:
document.write( getTokens()['name'] );

...它将打印出“murray”。


8

对于像这样的单参数值,如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
    }
} 

1
我喜欢这个解决方案! - akmur

7
// 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


6

优雅、实用的样式解决方案

让我们创建一个包含URL参数名称作为键的对象,然后我们可以轻松地按名称提取参数:

// URL: https://example.com/?test=true&orderId=9381  

// Build an object containing key-value pairs
export const queryStringParams = window.location.search
  .split('?')[1]
  .split('&')
  .map(keyValue => keyValue.split('='))
  .reduce<QueryStringParams>((params, [key, value]) => {
    params[key] = value;
    return params;
  }, {});

type QueryStringParams = {
  [key: string]: string;
};


// Return URL parameter called "orderId"
return queryStringParams.orderId;

我喜欢这个,但是在reduce函数中一定要返回累加器,否则对我没有用。 - Ella
@Ella 这是一个打字错误,如果没有 return 就无法工作。 - user6269864
现在看起来更好了,希望你能进入第一页! - Ella

6

这已经是我第N++次寻找一种简洁的方法来做到这一点。
如果我需要回来,就会在这里保存下来......

const parseUrlQuery = (value) => {
  var urlParams = new URL(value).searchParams
  return Array.from(urlParams.keys()).reduce((acc, key) => {
    acc[key] = urlParams.getAll(key)
    return acc
  }, {})
}

console.log(parseUrlQuery('http://url/path?param1=A&param1=B&param2=ABC&param3=61569'))


6

简单的方法

function getParams(url){
        var regex = /[?&]([^=#]+)=([^&#]*)/g,
            params = {},
            match;
        while(match = regex.exec(url)) {
            params[match[1]] = match[2];
        }
        return params;
    }

然后像这样调用它:getParams(url)。

5

以下是我的工作内容:

var uriParams = getSearchParameters();
alert(uriParams.c);


// background functions:

// Get object/associative array of URL parameters
function getSearchParameters () {
  var prmstr = window.location.search.substr(1);
  return prmstr !== null && prmstr !== "" ? transformToAssocArray(prmstr) : {};
}

// convert parameters from url-style string to associative array
function transformToAssocArray (prmstr) {
  var params = {},
      prmarr = prmstr.split("&");

  for (var i = 0; i < prmarr.length; i++) {
    var tmparr = prmarr[i].split("=");
    params[tmparr[0]] = tmparr[1];
  }
  return params;
}

5

一行代码,适用于IE11:

> (window.location.href).match('c=([^&]*)')[1]
> "m2-m3-m4-m5"

所有解决方案中最简单的一个。 - synkro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接