我使用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()的其他解决方案持开放态度。