2014-11-04 52 views
0

我需要重新加载页面位置后更新参数值,如果参数总是在一个特定的顺序,它不会有困难,但他们不是。Javascript Reload页面参数值变化时参数值没有特别的顺序

所以,如果有一个固定的模式,我可以通过正则表达式匹配瞄准他们,所以例如用于URL: http://www.example.html?sf_id=15040&15041.survey=form&variation=25002_1

我所针对的是这样的:

window.location.replace(window.location.href.replace(sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002_2')); 

但现在PARAM发生难度随机的,所以这些都是有效的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&param2=value2&15041.survey=form 

我知道我仍然可以正确的if/else if语句,但我不认为这就是钻机ht的方式,因为没有特定的模式。

任何帮助表示赞赏!谢谢。

回答

0

基于this SO answer,我会用下面的代码来获取所有的查询参数数组:

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('&')); 

更新
上面的函数返回一个关联数组,这样你就不能使用.join()正如我以前的回答。相反,您必须遍历这些键并重新构建新的查询字符串。我还包含了一个函数来替换参数键 - 您可能会过度使用该部分。

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 
+0

所以我的主要挑战是针对一个参数:15041.survey = form,我需要将'15041'更改为'460',这样新的url将有460.survey = form。 示例intital URL:http://www.example.html?sf_id = 15040&15041.survey = form&variation = 25002_1 新URL将为:http://www.example.html?sf_id = 15040&460.survey = form&variation = 25002_1 – user988544 2014-11-04 20:47:39

0

请参阅if this answer将引导您到曲目。之后,您可以进行各种对象与对象的比较来检查它们是否匹配。