使用jQuery更改URL查询字符串的值

32

我有一个例子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刷新页面。
是否可能更改参数值并将其添加回去?
注意:附加参数可以是任何东西,因此我无法手动将它们添加到带有新页码的路径名中!
2个回答

58

如果您仅需要修改页码,可以替换它:

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

18
事实上,在许多情况下需要引入复杂性。你的替换语句将会替换掉mypage=1&page=1mypage的值。 - Nux
3
你是正确的,但问题很具体,解决方案并不打算通用。如果你想通用一些,可以使用两个替代,而不是一个:"?page=1" 和 "&page=1"。 - Kaizo
1
这个不起作用。 - tdbeckett

33

如果不传递参数,$.params()将会给你一个包含参数的键值对对象。

$.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年编写的,我认为这个简单的解析不需要大量维护。如果你需要更多功能,请克隆存储库并添加。 - vinnyjames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接