jQuery地址插件更改参数

时间:2013-05-27 18:27:19

标签: jquery jquery-plugins browser-history

我使用Asual的jQuery地址插件。目前我需要更改url参数,我这样做:

// init state
$.address.state('/');

// change parameter
$.address.parameter('q', 'val');

我有以下网址: http://example.com/admin/cities/

并期望以这种方式改变: http://example.com/admin/cities/?q=val

但它改变了这个: http://example.com/?q=val

好吧,我想,让我们以这种方式设置状态:

$.address.state('/admin/cities/');

它开始像我期望的那样工作,但是我又遇到了另一个问题。在另一个地方,我需要根据$.address.value()设置href(我有绝对路径):

$.address.value($(el).attr('href'));

执行此操作我希望我的网址从http://example.com/admin/cities/?q=val更改为http://example.com/what/i/have/in/href?some=param,但我得到http://example.com/admin/cities/what/i/have/in/href?some=param

另一方面,如果我第一次执行

,则不存在此问题
$.address.state('/');
$.address.value($(el).attr('href'))

然后才

$.address.parameter('q', 'val');

在这种情况下,一切正常。首先http://example.com/admin/cities/更改为http://example.com/what/i/have/in/href?some=param,然后添加参数:http://example.com/what/i/have/in/href?some=param&q=val

也就是说,看起来我要么做错了,要么插件有初始化错误。

实际上我找到了自己的解决方案,但要成为一种正确的方法。这是:

$.address.state('/');
// switching off auto update in order to avoid adding value to the browser history
$.address.autoUpdate(false);
$.address.value(document.location.pathname+document.location.search);
$.address.autoUpdate(true);

在这种情况下,插件变为“初始化”并且更改参数只是更改/添加它而不更改路径,并且更改值也会继续工作。

那就是说,我的问题如下:有没有更好的方法来解决我的问题?

更新: 事实上,我对使用pushState()/ replaceState()的其他解决方案持开放态度。

0 个答案:

没有答案