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

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

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

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

我想从此URL获取值,以便我可以将filterA与FilterA搜索值相关联并将filterB与filterB搜索值相关联

你可以使用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*" ] } 
 function getParamsFromUrl() { var query = location.search.substr(1); var params = query.split("&"); var result = {}; for(var i=0; i 

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

 let params = (new URL(document.location)).searchParams; let values = params.getAll("param-name");