Javascript 强制页面刷新并跳转到#节
看来我一定错过了一些基本的东西。我试图实现的目标看起来很常见,因此我想知道为什么没有直接的方法 问题是,我想从JavaScript刷新当前页面,同时进入#部分。如果我只是:Javascript 强制页面刷新并跳转到#节,javascript,browser,Javascript,Browser,看来我一定错过了一些基本的东西。我试图实现的目标看起来很常见,因此我想知道为什么没有直接的方法 问题是,我想从JavaScript刷新当前页面,同时进入#部分。如果我只是: document.location.href = document.location.href + "#section"; 我测试的所有浏览器都只需滚动到#部分(无需重新加载)。这在某种程度上是有道理的。只是为了完整,如果我这样做的话 document.location.assign(document.location.h
document.location.href = document.location.href + "#section";
我测试的所有浏览器都只需滚动到#部分(无需重新加载)。这在某种程度上是有道理的。只是为了完整,如果我这样做的话
document.location.assign(document.location.href + "#section");
它做同样的事情(毫不奇怪;它在内部归结为同一个函数)。最后,document
对象似乎还有document.reload()
函数,该函数采用可选的布尔参数,指定是否强制重新加载,但显然,它不允许指定#部分。我能找到的唯一方法(使用这些方法)是以下组合:
document.location.assign(document.location.href + "#section");
document.location.reload();
但这并不理想,因为正如您可能猜到的,它会滚动然后重新加载,这会导致浏览器最终实际滚动三次
我知道有很多解决方法:服务器端重定向或添加一些唯一的随机查询字符串参数,但奇怪的是没有简单的方法。这是location对象的“哈希”值。你需要这样设置它
location.hash = "#section";
如果不一致工作,您可能需要考虑使用ScReltoType函数…
function scrollToElement(elem) {
if(typeof elem == 'string') elem = document.getElementById(elemId);
var top = 0;
if(elem) {
if(elem.offsetParent) {
top = elem.offsetTop;
while(elem = elem.offsetParent) {
top += elem.offsetTop;
}
}
window.scrollTo(0, top);
}
}
如果你确实需要重新加载页面(不知道为什么),试着打开一个窗口本身
window.open(location.href + '#section', '_top');
或者尝试替换
location.replace(location.href + '#section');
有一个简单得多的解决方案:
if (document.location.href.match(/[?]/))
document.location.href = document.location.href + '&fake_param=' + Math.random() + '#section' ;
else
document.location.href = document.location.href + '?fake_param=' + Math.random() + '#section' ;
一个显而易见的问题是:究竟为什么页面需要重新加载?谢谢。我没有想到window.open(),但我只是测试了它,如果我没有弄错的话,它的行为也是一样的。它只是滚动,不会触发完全重新加载。我知道它可能听起来有点可疑(强制重新加载),可能是这样,我稍后会更改它。但这是我正在开发的应用程序的第一个版本,优先考虑的是有一些完整的工作版本,然后完善细节。但无论如何,我很惊讶,我期望用JavaScript轻松完成的事情毕竟不是那么容易。