0

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

4

0 回答 0