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