根据现有参数向url添加一个参数 - 不同。
问题描述:
我试图添加一个参数到一个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¶m=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, " ")); }
});
答
的STE PS可能是:
1.首先解析URL,并在新的URL的末尾,除了param
和fss
复制所有参数到新的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;
}
};
嗨,谢谢!即时通讯此错误:SyntaxError:缺少)在此脚本参数列表后 –
有一个支架丢失,现在它已更新。 –
似乎不工作 - 它注册点击机器人没有发生。 –