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

sAI*_*ING 7 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中.

在Safari中使用location.hash滚动页面时找到了一个解决方案,但我不想添加不必要的标记.

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

Mar*_*kka 17

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

location.hash = 'a';

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

setHash('a');
Run Code Online (Sandbox Code Playgroud)

这应该够了吧.