使用jQuery更改url查询字符串值

Cam*_*ron 30 javascript jquery

我有一个示例网址,如:

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;

            }
        });

    });
Run Code Online (Sandbox Code Playgroud)

因此,当用户点击pageNum文本框上的返回时,它将获取当前页面URL,解析它,然后找出当前页码,然后我需要一种方法来替换页面编号的值与文本框中的新值创建一个新的URL,然后最终使用这个新的URL刷新页面.

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

注意:附加参数可以是任何参数,因此我无法使用新页码手动将它们添加到路径名中!

Kai*_*izo 58

如果您只需要修改页面num,则可以替换它:

var newUrl = location.href.replace("page="+currentPageNum, "page="+newPageNum);
Run Code Online (Sandbox Code Playgroud)

  • 实际上......在许多情况下需要复杂化.你的replace语句将替换`mypage = 1&page = 1`中的`mypage`值. (18认同)
  • 简化方法+1.:-) (6认同)
  • @Nux你是对的,但问题是具体的,解决方案不是一般性的.如果你想要它更通用它可以是两个替换而不是一个:"?page = 1"和"&page = 1". (3认同)

And*_*eas 30

$.params()没有参数的purls 将为您提供参数的键值对象.

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

var params = parsedUrl.param();
delete params["page"];

var newUrl = "?page=" + $(this).val() + "&" + $.param(params);
Run Code Online (Sandbox Code Playgroud)

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

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

var newUrl = "?" + $.param(params);
Run Code Online (Sandbox Code Playgroud)