向网址添加参数 - 因现有参数而异

Ad a parameter to the url - different depending on existing parameters.

本文关键字:参数 添加      更新时间:2023-09-26

我试图向网址添加参数 - 但有一些问题。

对于我的大多数 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- 

遇到的问题是我使用的系统有一个内置过滤器 - 如果使用我的脚本添加参数不起作用。

然后,网址将如下所示:

/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, " ")); } 
});

步骤可以是:

1.首先解析 URL 并将除 paramfss 之外的所有参数复制到新 URL

2.然后在新URL的末尾附加参数和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;
    }
};