javascript - 如果存在则附加 url 参数,如果不存在则添加 jQuery

标签 javascript jquery

我正在根据尺寸、颜色等创建过滤器。因此可以选择多个项目。当我单击每个项目时,它应该附加到当前 URL。请检查以下网址,

如果 URL 中不存在参数

http://example.com/category-3?tracker=Q2F0ZWdvcnkgMw&color=White

如果参数存在并且选择相同的颜色

http://example.com/category-3?tracker=Q2F0ZWdvcnkgMw&color=White

如果参数存在并且选择了多种颜色

http://example.com/category-3?tracker=Q2F0ZWdvcnkgMw&color=White-Black

如何使用 jQuery 实现相同的功能。我尝试过使用下面的代码,

function setGetParameter(paramName, paramValue) {
    var url = window.location.href;
    var hash = location.hash;
    url = url.replace(hash, '');
    if (url.indexOf(paramName + "=") >= 0) {
        var prefix = url.substring(0, url.indexOf(paramName + "="));
        var suffix = url.substring(url.indexOf(paramName + "="));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix + "-";
    } else {
        if (url.indexOf("?") < 0)
            url += "?" + paramName + "=" + paramValue + "-";
        else
            url += "&" + paramName + "=" + paramValue + "-";
    }
    window.location.href = url + hash;
}

上面的代码适用于单个参数值。对于多个值如何更改上述代码。

最佳答案

我建议根本不要使用此代码来构建 URL。
使用类似 https://medialize.github.io/URI.js/ 的内容它恰好有一个 jQuery 插件。
为什么?
您此处的查询参数未进行编码,因此可能会“破坏”网址。使用 URI.js 等库和构建器来附加查询参数将解决您的问题。解析和构建 URL 并不像看起来那么简单,因此最好依赖经过测试的代码。

var url = URI(window.location.href); // no need to remove and add the hash back anymore
var queryMap = url.query(true);
if (queryMap[paramName]) {
    // param already exists
    var values = queryMap[paramName].split('-');
    if (!values.includes(paramValue)) {
        // paramValue not found: add it
        values.push(paramValue);
        url.setQuery(paramName, values.join('-'));
    }
} else {
    // param does not exist yet
    url.setQuery(paramName, paramValue);
}

window.location.href = url.toString();

关于javascript - 如果存在则附加 url 参数,如果不存在则添加 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249068/

相关文章:

javascript - 在javascript中,NEW函数是否有可能返回NULL?

javascript - 有没有办法从 csv 中获取文本格式?

javascript - 如何在上下文菜单中创建子菜单?

javascript - 如何使用剑道标签附加事件?

javascript - 通过 AJAX 发送 JS 数组到 laravel 不起作用

jQuery 插件选项 : Extend before or inside this. 每个 block ?

javascript - 检查一个点是否穿过一条线

javascript - 获取 JavaScript 对象中具有匹配键的所有值的总和?

javascript - 我有一段代码试图让一个盒子移动,但它不起作用。语言为HTML5,代码如下

javascript - jQuery 父级和表的奇怪之处