当参数没有特定顺序时,Javascript重新加载参数值变化的页面
我需要在更新参数值后重新加载页面位置,如果参数总是按特定顺序排列,这并不困难,但事实并非如此 因此,如果有一个设置模式,我可以通过正则表达式匹配将它们作为目标,例如URL: 我的目标是这样的:当参数没有特定顺序时,Javascript重新加载参数值变化的页面,javascript,url,query-string,url-parameters,url-parsing,Javascript,Url,Query String,Url Parameters,Url Parsing,我需要在更新参数值后重新加载页面位置,如果参数总是按特定顺序排列,这并不困难,但事实并非如此 因此,如果有一个设置模式,我可以通过正则表达式匹配将它们作为目标,例如URL: 我的目标是这样的: window.location.replace( window.location.href.replace( sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002
window.location.replace( window.location.href.replace( sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002_2' ) );
但是现在参数出现是随机的,所以这些都是有效的URL:
http://www.example.html?15041.survey=form&sf_id=15040&variation=25002_1
http://www.example.html?variation=25002_1&sf_id=15040&15041.survey=form
http://www.example.html?param1=value1&variation=25002_1&sf_id=15040¶m2=value2&15041.survey=form
我知道我仍然可以更正if/else if语句,但我认为这不是正确的方法,因为没有特定的模式
感谢您的帮助!谢谢。基于,我将使用以下代码获取所有查询参数的数组:
var qs = (function(a) {
if (a == "") return {};
var b = {};
for (var i = 0; i < a.length; ++i)
{
var p=a[i].split('=', 2);
if (p.length == 1)
b[p[0]] = "";
else
b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
}
return b;
})(window.location.search.substr(1).split('&'));
我会带你去跑道。之后,您可以进行各种对象到对象的比较,以检查它们是否匹配。因此,我的主要挑战是针对一个参数,如:15041.survey=form,其中我需要将“15041”更改为“460”,以便新url具有460.survey=form。示例初始URL:和新URL为:
function replaceParamKey(qsObj, oldKey, newKey) {
qsObj[newKey] = qsObj[oldKey];
delete qsObj[oldKey];
}
function constructQueryString(qsObj) {
var qsString = "?",
c = 0;
for (var param in qsObj) {
if (c) qsString += "&";
qsString += encodeURIComponent(param);
if (qsObj[param] !== "") qsString += ("=" + encodeURIComponent(qsObj[param]));
c++;
}
return qsString;
}
console.info(qs); // Object {15041.survey: "form", sf_id: 15040, variation: "25002_1"}
replaceParamKey(qs, "15041.survey", "460.survey");
console.info(constructQueryString(qs)); // ?sf_id=15040&variation=25002_1&460.survey=form