防止页面加载时的默认哈希行为

时间:2010-08-17 14:34:09

标签: jquery

我有一个带标签界面的页面。每个标签都有唯一的ID。我已经启用了指向该页面的链接,并在哈希之后附加了id,我现在正试图规避默认的浏览器行为,该行为在页面上元素的位置打开带有哈希的URL。

所以:

  • pageA链接到pageB,如下所示:<a href="pageB.php#Tab4">Go</a>
  • pageB打开,我的jQuery激活了正确的标签,但浏览器已向下滚动到页面上<div id="Tab4">所在的位置。

这正是我想要阻止的。

有什么想法吗? 谢谢!

4 个答案:

答案 0 :(得分:46)

没有办法阻止默认的哈希行为,但您可以更改哈希方案,以使#tag与页面上的任何ID不对应。在页面加载时,获取哈希值并附加一个常量(例如:_hash),然后使用jQuery滚动到该值。

实施例: http://mysite/page.php#tab4

page.php有<div id="tab4_hash"></div>

在页面加载时,通过tab4 + _hash

获取div

答案 1 :(得分:3)

我会用这个:

window.scrollTo(0,0);

这样您就不需要更改元素ID或其他任何内容。

我遇到了我想向下滚动到标签的问题,但由于某种原因,它滚动到页面底部(不,没有重复的ID)。我认为这是因为浏览器会在内容加载完之前滚动到id,而额外的内容会将元素推到新的滚动位置之上。我修好了这个:

if(document.location.hash)
{
    window.location = document.location.hash;
}

此处的“if”语句是强制性的,或者您可能会获得无限循环

答案 2 :(得分:1)

完成加载右侧标签后,运行:

window.location = '#';

答案 3 :(得分:0)

  1. 您应该只隐藏id = hash的元素
  2. - 然后,在页面加载后,您可以使元素可见。
  3. 您可以在此处找到更多信息:How to disable anchor "jump" when loading a page?