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

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

我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?


当前回答

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);

其他回答

这里是一个递归解决方案,它没有正则表达式,并且具有最小的变异(只有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'];

您可以简单地使用核心javascript以js对象的形式获取参数的键值:

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5";
var url = new URL(url_string);
let obj = {};
var c = url.searchParams.forEach((value, key) => {
  obj[key] = value;
});
console.log(obj);

以下是我所做的:

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;
}

以下是用于将url查询参数解析为Object的angularJs源代码:

函数tryDecodeURIComponent(值){尝试{返回decodeURIComponent(value);}捕获(e){//忽略任何无效的uri组件}}函数isDefined(value){return typeof value!==“undefined”;}函数parseKeyValue(keyValue){keyValue=keyValue.replace(/^\?/,“”);var obj={},key_value,key;var iter=(keyValue||“”).split('&');对于(var i=0;i<iter.length;i++){var kV值=iter[i];if(kV值){key_value=kV值。替换(/\+/g,“%20”)。拆分(“=”);key=tryDecodeURIComponent(key_value[0]);if(isDefined(键)){var val=isDefined(key_value[1])?tryDecodeURIComponent(key_value[1]):true;if(!hasOwnProperty.call(obj,key)){obj[key]=val;}else-if(isArray(obj[key])){obj[key].push(val);}其他{obj[key]=[obj[key],val];}}}};返回obj;}警报(JSON.stringify(parseKeyValue('?a=1&b=3&c=m2-m3-m4-m5')));

您可以将此函数添加到window.location:

window.location.query = function query(arg){
  q = parseKeyValue(this.search);
  if (!isDefined(arg)) {
    return q;
  }      
  if (q.hasOwnProperty(arg)) {
    return q[arg];
  } else {
    return "";
  }
}

// assuming you have this url :
// http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

console.log(window.location.query())

// Object {a: "1", b: "3", c: "m2-m3-m4-m5"}

console.log(window.location.query('c'))

// "m2-m3-m4-m5"

对于像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
    }
}