2016-03-08 55 views
0

我試圖添加一個參數到一個url - 但有一些問題。根據現有參數向url添加一個參數 - 不同。

大多數我的網址是這樣的:

/products/Cables/Network-CAT-cables 

然後我有三個按鈕,一個參數添加到URL的末尾 - 每個按鈕的替換最後添加的參數。它的工作原理是這樣的:

Click 1: /products/Cables/Network-CAT-cables?param=list 
Click 2: /products/Cables/Network-CAT-cables?param=grid 
Click 2: /products/Cables/Network-CAT-cables?param=compactlist 

而且我可以替代,因爲我想 - 這些控制我的產品的不同佈局。我還寫了一個過濾器,用於廣告時,我已經添加參數後的參數,和腳本確保當我改變佈局濾波器參數仍然是我的佈局參數後,像這樣:

/products/Cables/Network-CAT-cables?param=list&fss=Cat5- 

問題我的是,我使用的系統有一個內置的過濾器 - 如果使用我的腳本添加參數不起作用。

然後URL可能看起來像這樣:

/products/Cables/Network-CAT-cables?searchtrack=Parameter+search&sps=d211av450240_2.0d&cat1id=11&cat2id=923&pricesort=false&instock=true 

然後我需要在我的按鈕腳本在末尾添加布局參數,如果該URL regarldess所以它看起來是這樣的:

/products/Cables/Network-CAT-cables?searchtrack=Parameter+search&sps=d211av450240_2.0d&cat1id=11&cat2id=923&pricesort=false&instock=true&param=list 

腳本我使用(有三個不同的班我的三個按鈕)

$('.click5').on('click', function() { 
console.log("Clicked"); 
var baseUrl = window.location.href.split("?")[0]; 
var fss = getParametersByName("fss"); 
var params = getParametersByName("param"); 
if(params == "grid") param = "grid"; else param = "grid"; 
var newUrl = baseUrl+"?param="+param; 
if((fss).length>0) newUrl = newUrl+"&fss="+fss; 
window.location.href=newUrl; 
function getParametersByName(name) { name = name.replace(/[[]/, "\ [").replace(/[]]/, "\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } 
}); 

回答

0

的STE PS可能是:

1.首先解析URL,並在新的URL的末尾,除了paramfss複製所有參數到新的URL

2.然後追加PARAM和FSS。

$('.click5').on('click', function() { 
    console.log("Clicked"); 

    var urlParts = window.location.href.split("?"); 
    var baseUrl = urlParts[0]; 
    var parameters = urlParts[1].split("&"); 
    var newUrl = baseUrl + '?'; 

    // 1. step - copy all parameters except param and fss 
    var i = 0; 
    while (i < parameters.length) { 
     var kvp = parameters[i]; 
     var arr = kvp.split("="); 

     var name = arr[0]; 
     var value = arr[1]; 

     if (name != 'param' && name != 'fss') { 
      newUrl = newUrl.appendUrlParam(kvp); 
     } 
     i++; 
    } 

    // 2. step - append the param and fss to newUrl 
}); 

String.prototype.endsWith = function(suffix) { 
    return this.indexOf(suffix, this.length - suffix.length) !== -1; 
}; 

String.prototype.appendUrlParam = function(kvp) { 
    if (this.endsWith("?") || this.endsWith("&")) { 
     return this + kvp; 
    } 
    else if (this.indexOf("?") > 0) { 
     return this + "&" + kvp; 
    } 
    else { 
     return this + "?" + kvp; 
    } 
}; 
+0

嗨,謝謝!即時通訊此錯誤:SyntaxError:缺少)在此腳本參數列表後 –

+0

有一個支架丟失,現在它已更新。 –

+0

似乎不工作 - 它註冊點擊機器人沒有發生。 –