【问题标题】:Change url query string value using jQuery [duplicate]使用 jQuery 更改 url 查询字符串值 [重复]
【发布时间】:2013-06-17 04:44:21
【问题描述】:

我有一个示例 URL,例如:

http://domain.com/Documents/?page=1&name=Dave&date=2011-01-01

查询字符串包含当前页码和两个附加过滤器(名称和日期)。

使用以下 URL 解析器:https://github.com/allmarkedup/purl 我可以访问 URL 的某些部分,例如页码。

我正在尝试创建一种方式,让用户能够在文本框中输入数字,然后加载该页码,同时保持所有其他查询字符串不变。

$(document).ready(function () {

        $('.pageNum').live('keyup', function (e) {
            e.preventDefault();
            if (e.which == 13) {

                var currentUrl = window.location.href;

                var parsedUrl = $.url(currentUrl);

                var currentPageNum = parsedUrl.param('page');

                var newPageNum = $(this).val();

                var newUrl = //

                window.location.href = newUrl;

            }
        });

    });

所以当用户在 pageNum 文本框上点击返回时,它会获取当前页面 url,解析它,然后找出当前页码,然后我需要一种方法将页码的值替换为新值在文本框中创建一个新的 url,然后最后使用这个新的 url 刷新页面。

是否可以更改参数值然后重新添加?

注意:附加参数可以是任何东西,所以我不能手动将它们添加到带有新页码的路径名中!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    如果只需要修改page num可以替换:

    var newUrl = location.href.replace("page="+currentPageNum, "page="+newPageNum);
    

    【讨论】:

    • 其实……很多情况下都需要复杂化。您的替换语句将替换 mypage=1&page=1 中的 mypage 值。
    • @Nux 你是对的,但问题是具体的,解决方案并不是通用的。如果您希望它更通用,它可以是两个替换而不是一个:“?page=1”和“&page=1”。
    • 这不起作用
    【解决方案2】:

    purls $.params() 不带参数使用会给你一个参数的键值对象。

    jQuerys $.param() 将从提供的对象/数组中构建一个查询字符串。

    var params = parsedUrl.param();
    delete params["page"];
    
    var newUrl = "?page=" + $(this).val() + "&" + $.param(params);
    

    更新
    我不知道为什么我在这里使用delete...

    var params = parsedUrl.param();
    params["page"] = $(this).val();
    
    var newUrl = "?" + $.param(params);
    

    【讨论】:

    • @kev,您的信息具有误导性。我测试了purl,它工作正常。 URI 规范RFC 3986 是在 2005 年编写的,我认为这种简单的解析不需要大量维护。如果您需要更多,请克隆 repo 并添加。
    猜你喜欢
    • 2011-06-07
    • 2011-04-18
    • 2012-03-26
    • 1970-01-01
    • 2017-07-11
    • 2016-10-29
    • 2011-04-16
    相关资源
    最近更新 更多