当使用Jquery或JS存在多个具有相同名称的参数时,获取URL查询字符串参数

时间:2014-04-08 16:00:22

标签: javascript jquery query-string

我有一个由多个过滤器组成的URL,这些过滤器已命名并具有相应的搜索条件,我无法更改这些URL的构建方式。

我知道如何在我试图获取一个参数的值的场景中获取查询字符串参数,但是我似乎无法弄清楚如何将它们恰当地关联在一起。例如,这里是网址:

/AllItems.aspx?FilterName=FilterA&FilterMultiValue=*FilterASearchValue*&FilterName=FilterB&FilterMultiValue=*FilterBSearchValue*"

我想从此网址获取值,以便我可以将过滤器A与FilterA搜索值相关联,并将过滤器B与过滤器搜索值相关联

3 个答案:

答案 0 :(得分:2)

你可以使用reduce来做到这一点:

var u='/AllItems.aspx?FilterName=FilterA&FilterMultiValue=*FilterASearchValue*&FilterName=FilterB&FilterMultiValue=*FilterBSearchValue*'

u.split(/[?&]/).reduce(function(a,b,c){
  var p=b.split("="), k=p[0], v=decodeURIComponent(p[1]);
  if(!p[1])return a;
  a[k]=a[k]||[];
  a[k].push(v);
 return a;
}, {})

返回一个params数组而不是字符串,允许同名参数重复:

{   
    "FilterName": [
        "FilterA",
        "FilterB"
    ],
    "FilterMultiValue": [
        "*FilterASearchValue*",
        "*FilterBSearchValue*"
    ]
}

答案 1 :(得分:0)

function getParamsFromUrl() {
  var query = location.search.substr(1);
  var params = query.split("&");
  var result = {};
  for(var i=0; i<params.length; i++) {
    var item = params[i].split("=");
    result[item[0]] = item[1];
  }
  return result;
}

答案 2 :(得分:0)

另一种适用于现代浏览器的解决方案:

BasicFileAttributes