是否可以在链接中预先添加哈希值('#')进行Ajax深层链接

时间:2011-01-10 07:53:48

标签: javascript jquery fragment-identifier deep-linking jquery-address

我见过的大多数jquery深层链接插件都要求我将“#”附加到我的链接上。这是一个例子:

<a href="#page1.html">Page 1</a>

即便推特这样做(但是,推特遵循Google规范使用#!进行可抓取链接,jquery深层链接库(如Jquery BBQ和Jquery地址)也支持此推文。

我使用新的Twitter关闭了Javascript,但它不起作用。我问这个问题是否可以应用深层链接,即使Javascript关闭,仍然有一个功能性网站。

提前致谢!

3 个答案:

答案 0 :(得分:5)

这应该可以使用 HTML5 。我最近搜索了有关此主题的信息,并找到了 this very interesting library History.js

如果可能的话,使用 HTML5 进行无哈希深度链接, HTML4 则使用哈希(如果您愿意,则使用<或>)。

This article by the History.js author 绝对值得一读。

答案 1 :(得分:3)

不 - 如果你想使用AJAX深层链接,你将不得不以这种方式工作。锚是URL的唯一部分,可以在不重新加载页面的情况下进行更新。它通常不会发送到服务器,所以它总是由浏览器处理。

您可以做的一件事是在a标记中包含实际链接,然后使用jQuery更新链接:

<a href="page1.html" class="ajaxLoad">Page 1</a>

<script>
$(function(){
  $("a.ajaxLoad").each(function(){ this.href = '#' + this.href })
});
</script>

关闭JavaScript后,当用户点击该链接时,会将用户重定向到“page1.html”。否则,链接将更改为锚点,您应该能够使用深层链接代码将其选中。这样的好处是非JavaScript浏览器将能够正确使用链接(这包括搜索引擎蜘蛛)。


编辑:您知道,您可以执行一些操作,而不是使用JavaScript来更改它。例如,您可以附加到链接的点击处理程序,并使用load或其他内容来更改要加载页面的区域。

$("a.ajaxLoad").click(function(e){
    e.preventDefault();
    $("#content").load(this.href + ' #content');
});

答案 2 :(得分:2)

Anchor是唯一可以在没有完整页面重新加载的情况下更改的部分。所以根据定义你没有别的办法。另外,根据定义,锚没有传递给服务器,因此关闭javascript - 这显然不起作用。