问题
I have a URL that is comprised of multiple filters that are named and have corresponding search criteria, I cannot change the way these urls are constructed.
I am aware of how to get query string parameters in a scenario where I am just trying to get the value of one parameter, however I can't seem to figure out how to associate them together appropriately. For example here is the url:
/AllItems.aspx?FilterName=FilterA&FilterMultiValue=*FilterASearchValue*&FilterName=FilterB&FilterMultiValue=*FilterBSearchValue*"
I would like to get the values from this url so that I can associate Filter A with the FilterA Search Value and Associate Filter B with the FilterB Search Value
回答1:
you can use reduce to do that:
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;
}, {})
which returns an array of params instead of a string, allowing same-name params to repeat:
{
"FilterName": [
"FilterA",
"FilterB"
],
"FilterMultiValue": [
"*FilterASearchValue*",
"*FilterBSearchValue*"
]
}
回答2:
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;
}
回答3:
Another solution which works in modern browsers:
let params = (new URL(document.location)).searchParams;
let values = params.getAll("param-name");
来源:https://stackoverflow.com/questions/22942257/get-url-query-string-parameters-when-there-are-multiple-parameters-with-the-same