用#重写浏览器地址栏中的URL?

时间:2010-07-08 20:49:15

标签: jquery

我的页面上有一些通过ajax调用加载的元素。我想在用户浏览器中点击某个项目时更改该URL。例如,我的页面有一个动物列表:

Horse
Cow
Pig

当用户点击其中一个项目时,我想更新浏览器地址栏中的网址(不重新加载页面):

http://www.mysite.com#Horse
http://www.mysite.com#Cow
http://www.mysite.com#Pig

我认为这是允许的,将#符号放在地址中而不重新加载页面。有没有办法在jquery中这样做?

由于

4 个答案:

答案 0 :(得分:6)

你可以在vanilla JS中完成,不需要使用location.hash的jQuery,如下所示:

window.location.hash = "Cow";

答案 1 :(得分:4)

你不能把元素链接到哈希吗?

<a href="#Pig">Pig</a>

答案 2 :(得分:1)

警告!每个浏览器都没有实现window.location.hash!解决此问题的方法如下:

if (!("hash" in window.location)) {
  window.location.__defineGetter__("hash", function() {
    if (location.href.indexOf("#") == -1) return "";
    return location.href.substring(location.href.indexOf("#"));
  });
  window.location.__defineSetter__("hash", function(v) {
    if (location.href.indexOf("#") == -1)
      location.href += v;
    location.href = location.href.substring(0, location.href.indexOf("#")) + v;
  });
}

这是未经测试的,所以先测试一下!我的建议是使用:

<a href="#Pig">Oink!</a>

更改网址。 (顺便说一下,这里实现的window.location.hash的行为与您实现它的浏览器的行为相同。您必须将哈希字符添加到URL。)

答案 3 :(得分:1)

我会考虑使用SWFAddress进行深层链接....它在JavaScript中的工作方式与ActionScript相同