2014-11-04 47 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將引導您到曲目。之後,您可以進行各種對象與對象的比較來檢查它們是否匹配。