JavaScript:去除URL中的锚点(哈希)部分

6

我已经搜索了30分钟,所以如果之前有人问过这个问题,请原谅。

我有一些Ajax代码,它返回一组结果,当用户点击其中一个结果时,它会在URL上追加数据,并由PHP在下一页进行GET请求。问题是,如果用户单击了一些内置的锚点(我无法删除),URL将变为something.com#location1,因此添加?action=next将其转换为something.com#location1?action=next,而浏览器将其解释为长锚点,而不是新的URL以实际定向。

如果用户从未单击过锚点部分,则使用window.location=document.url+"?action=next"重定向工作顺利。

是否有方法可以从现有页面的URL中删除锚点(包括哈希标记)?

已解决

使用Michael W的答案,我解决了这个问题。我只需将这行替换为:

window.location=document.location.href.match(/(^[^#]*)/)[0]+"?action=next"

感谢您的帮助!


这些结果都没有帮到你吗?(https://www.google.com/search?q=javascript+remove+hash+from+url) - Colin Brock
我采用了Michael W的解决方案(稍作修改),并将其标记为如此,并编辑原始问题以包含解决方案,以供未来读者参考。 - Bing
4个回答

13

这个看起来稍微简单一些:

document.URL.replace(/#.*$/, "")

6
您可以匹配位置的前缀部分,例如hashtag:
document.location.href.match(/(^[^#]*)/)

5
对于那些阅读的人:这会返回一个数组。对第一个元素进行指定对我起了作用:window.location=document.location.href.match(/(^[^#]*)/)[0]我完全放弃使用 document.url - Bing

2
位置对象可以被独立组件访问,您可以使用它们来根据需要重构URL,使用尽可能多或尽可能少的部分。
官方文档目前已下线,但 this site 上似乎有相关内容。
如果你正在生成内部链接,你只需要生成相对URL,甚至只有 location.pathname 就足够了。
请注意,你将问题标记为 JavaScript,但由于你在 PHP 中编码,我怀疑你需要在 PHP 方面生成这些链接。

location.pathname 对我来说确实有效。但它和 window.location.pathname 有什么区别呢? - JAT86
1
@JAT86 - 这两者是相同的,因为它们引用了同一个对象。只是有两种访问方式而已。 - Itai

1

我正在使用:

document.location.href.split('#')[0];

它会找到第一个哈希并忽略路径中的其余部分。如果没有哈希,也没问题。在这种情况下,它将采用整个路径。


在我看来,应该被视为最佳方法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接