location.hash只在chrome和safari中生效一次

时间:2011-10-20 05:12:28

标签: javascript webkit

我使用location.hash滚动到我页面的某个位置。当位置没有哈希时,它工作正常。但如果位置已经具有相同的哈希值,则它不起作用。

例如,location.hash = 'a';滚动到<div id="a"></div>。现在location.href就像http://www.example.com/test.html#a。如果再次触发location.hash = 'a';,则窗口不会滚动。这只发生在Chrome和Safari中。

我在Scrolling a page using location.hash in Safari找到了解决方案,但我不想添加不必要的标记。

我也试过location.href = '#a'。这工作正常,但我担心它会导致页面重新加载。有人有更好的想法吗?

1 个答案:

答案 0 :(得分:17)

最好的办法是暂时用一些你知道在页面上不存在的值替换哈希值,然后重新加载试图访问的哈希值。

location.hash = 'a';

// this is the function that changes the hash
function setHash(newHash) {
    location.hash = 'someHashThatDoesntExist';
    location.hash = newHash;
}

setHash('a');

这应该可以解决问题。