修改location.hash没有页面滚动怎么解决 和 js怎么改变location.hash
首先,改location.hash不滚动页面这个问题,咱们可以通过一个小技巧来解决:
1. 先把页面上对应锚点的id临时清空
2. 修改location.hash值
3. 重新给该节点加上之前的id
这样,浏览器的默认跳转锚点行为不会被干扰,页面自然就会滚动啦!举个例子,代码大致是这样子的:
hash = hash.replace(/^#/, '');
var node = $('#' + hash);
if (node.length) {
node.attr('id', '');
}
document.location.hash = hash;
if (node.length) {
node.attr('id', hash);
}
顺便说说,想用JS改变location.hash,直接写location.hash = '新的hash值'就OK啦,而且可以用window.onhashchange事件来监听hash值的变化,挺方便的。

window.location.hash属性用法和location.href有什么区别
咱们来聊聊window.location.hash到底是干啥的吧:
-
定义用途
这是JS里专门用来获取或设置当前页面URL中#符号后面那部分的属性,比如http://example.com#section1,hash就是#section1。而且它的值总是以#开头,这点要记牢。 -
获取锚点信息
通过window.location.hash,你能轻松拿到当前页的锚点部分,比如做单页导航时贼实用。 -
清空hash
想让URL里没#那段内容?其实挺简单,设置location.hash=''就行了,但有个坑要注意——确认代码里没有某些语句阻止跳转,比如服务端输出的空白字符,否则清空可能不起作用。 -
location.href和location.hash区别
-window.location.href是整个URL字符串,操作它会导致页面跳转;比如location.href = "https://www.baidu.com",页面就会跳到百度首页。
-window.location.hash只涉及URL里#后面的部分,改变它只是更新锚点,无需跳转整个页面。 -
其他位置属性
还可以用window.location.protocol拿协议(http/https),host包含域名和端口,hostname只要域名,port就是端口号,想了解当前页面URL的各种部分,location对象通通给你。

相关问题解答
-
为什么直接修改location.hash页面不滚动呢?
哎,这其实是浏览器的小习惯啦,有时候修改location.hash直接更新锚点没有生效,比如页面元素的id和hash刚好不对或者被JS临时替换。可以用之前说的方法临时“摘掉”id,更新后再挂回去,这样页面才能滚顺溜溜地跳转过去,超级实用! -
用location.href跳转和用location.hash切换有什么区别?
简单来说,location.href像“重新打开新门”,会导致整个页面刷新跳转;而location.hash就像直接“把窗口滑动到房间里某个角落”,页面不刷新不重载,特别适合单页应用和锚点跳转,超级省心! -
设置location.hash为空时,有时候为什么URL还带#?
嘿嘿,这个坑是因为浏览器动作有些奇怪,或者代码里有隐藏内容阻止了正常跳转,比如网页头部的空白输出,或者某些拦截函数。最靠谱的方法就是确保清理干净,把location.hash=''写对,页面会把#号去掉,浏览器也不会残留。 -
window.location对象还能用在哪些场景啊?
这玩意儿可厉害啦,你想跳转页面、刷新当前页、改变URL参数,瞬间搞定。还可以用它来获取页面的协议、域名、路径、端口,做㊙️链接拼接,甚至动态控制锚点实现单页面导航,开发中简直离不开,超级给力又方便!
本文来自作者[邰昊焱]投稿,不代表龙云科技立场,如若转载,请注明出处:https://www.beyac020.com/zzzl/202512-bJUE6H8fnef.html
评论列表(3条)
我是龙云科技的签约作者“邰昊焱”
本文概览:修改location.hash没有页面滚动怎么解决 和 js怎么改变location.hash 首先,改location.hash不滚动页面这个问题,咱们可以通过一个小技巧来解...
文章不错《修改location.hash的问题和window.location的区别用法》内容很有帮助