2013-01-15 28 views
13

我想做我到目前为止发现的相反情况。我使用js设置了很多高度,我希望在页面加载后导航到url中的hashtag。我猜这是简单的,但我没有看到明显的答案...为例,点击这里......如何在页面加载后导航到hashtag?

http://alavita.rizenclients.com/#story

尝试使用此代码...

$(window).load(function() { 
    var hashTag = window.location.hash; 
    window.location = '/' + hashTag; 
}); 

实际上并没有带我到标记部分的顶部...

+0

我结束了与yepnope完全一起使用链接函数。在内容被填充之前,jQuery获得了hasthtag偏移量的值。我只是将你们帮助完成的代码混合在一起。 – brunam

回答

23

如果你只是想更改页面加载后哈希:如果要导航到新的哈希的URL

window.onload = function (event) { 
    window.location.hash = "#my-new-hash"; 
}; 

window.location.href = "http://website.com/#my-new-hash"; 

如果你要听用于改变URL的散列值;您可以考虑使用window.onhashchange DOM事件。

window.onhashchange = function() { 
    if (location.hash === "#expected-hash") { 
     doSomething(); 
    } 
}; 

但是它并没有被所有主流浏览器支持。 它现在有一个很宽的browser support。您也可以通过以小间隔轮询window.location.hash来检查更改,但这也不是非常有效。

对于跨浏览器解决方案;我建议Ben Alman's jQuery hashchange plugin将这些方法和其他一些方法结合起来使用回退机制。

编辑:你的问题更新后,我明白你想要的页面滚动到书签?:

您可以使用Element.scrollTop或jQuery的$.scrollTop()方法。

$(document).ready(function (event) { 
    var yOffset = $("#my-element").offset().top; 
    $("body").scrollTop(yOffset); 
}); 

查看文档here

0

你可以只设置当前位置:

window.location = 'http://alavita.rizenclients.com/#story'; 

或者设置散列(如果没有的话),然后重新装入:

window.location.hash = hashTag; 
window.location=window.location.href; 
+0

甚至运行此代码:[代码] $(窗口).load(函数(){ \t \t \t变种HASHTAG = window.location.hash; \t \t \t了window.location = '/' +#标签; \t \t });实际上并没有把我带到标记部分的顶部... – brunam

+0

编辑我的答案,包括另一种方法 –

0

你改变了你的问题。

查看此解决方案。 https://stackoverflow.com/a/2162174/973860,以便您了解正在发生的事情以及如何实施跨浏览器解决方案。

注意:在底部他提到了一个jquery插件,它可以满足您的需求。

http://benalman.com/projects/jquery-hashchange-plugin/

这个插件可以让你做这样的事情。这将适用于您当前的页面。但是您可能希望修改它以使其更加健壮。

$(function(){ 

    // Bind the event. 
    $(window).hashchange(function(){ 
     // get the hash 
     var hash = window.location.hash; 
     // click for your animation 
     $('a[href=' + hash + ']').click(); 
    }) 

    // Trigger the event (useful on page load). 
    $(window).hashchange(); 

}); 
相关问题