在锚标记内的链接中没有哈希的Ajax导航

时间:2011-09-16 04:03:19

标签: javascript ajax

我通常在某些链接中使用#中的<a>来使用ajax导航 <a href="#page2">Page 2</a>会将网址更改为www.example.com/#page2

我找到了一种方法来删除#并使用www.example.com/page2将其更改为history.pushState(),但是如何从锚标记中删除#仍然可以ajax正常工作。即我想制作<a href="page2">Page 2</a>

这就是facebook如何实现ajax我猜...

2 个答案:

答案 0 :(得分:1)

pushState()是浏览器的一项新功能,可让您在不更改网址的情况下更改网址。对于旧版浏览器,你需要使用hash /#/ page或/#!/ page(twitter)或/ #page

如果您希望您的网址看起来像您有几个选项。

您可以使用以下内容阻止链接发生:

$('a').click(function(e) {
   history.pushState(...);
   e.preventDefault(); // stops the link from happening
});

或者只是使用Regex剥离链接HREF的#out并用那个更新pushstate ..

要将新功能与哈希回退一起使用,您应该查看history.js

http://plugins.jquery.com/project/history-js

祝你好运!

答案 1 :(得分:0)

具有HREF属性的A元素是一个链接,用于在其他地方导航。具有NAME属性的A元素是锚点,旨在成为链接的目标。如果它具有两个属性,则它是一个锚和一个链接。

如果您正在使用元素来更改页面内容(无论您使用的是AJAX还是其他任何方法都不相关),那么您根本不需要A元素,您可以将任何元素与onclick侦听器一起使用,只需更改内容。更改网址没有问题。如果您希望它看起来像一个链接,那么使用CSS来设置跨度的样式,使其看起来像一个链接(或其他)。

用户期望链接(以及看起来像链接的东西)将它们带到另一个页面。他们希望看起来像按钮的东西几乎可以做任何事情,包括在其他地方导航,所以你的“链接”可能看起来像按钮。

如果你坚持使用A元素,那么在href中使用真实的URL并让执行AJAX(或页面修改)的onclick侦听器返回 false 。这样就不会遵循链接,并且地址栏中的URL也不会改变。

当然,我可能误解了“AJAX导航”的含义,这对我来说是一个含糊不清的术语。