如何删除除第一个之外的所有 URL 哈希?

Posted

技术标签:

【中文标题】如何删除除第一个之外的所有 URL 哈希?【英文标题】:How to remove all URL hashes except first? 【发布时间】:2019-09-29 18:42:17 【问题描述】:

嗯,在我的网站上,我有一个常见问题解答,用户可以通过 URL 访问特定问题,例如:

https://example.com/faq#question-1

为此我使用 Jquery,这样:

if (window.location.hash) 
    $(window.location.hash).open();

但如果用户在 URL 中输入多个哈希值,我希望这样:

https://example.com/faq#question-1#question-2#question-3#question-n

除第一个 #question-1 外,所有哈希都从 URL 中删除

我该怎么做?

编辑: 如果用户输入 https://example.com/faq#question-1#question-2#question-3#question-n 则将 url 更改为 https://example.com/faq#question-1 以便只有第一个哈希出现在 url 中,FAQ 只需读取单个哈希。

【问题讨论】:

您想删除哈希然后重定向回来吗?我不确定我是否理解。 @Twisty 仅从 URL 文本中删除哈希,不重定向回 【参考方案1】:

也可以这么简单

var hash = window.location.hash;
var filtered_hash = '';
if(hash.length > 0)
  filtered_hash = '#' + hash.split("#")[1];
  window.location.hash = filtered_hash;


console.log(filtered_hash);

【讨论】:

为什么console.log是空的? @HéctorManuelMartínezDurán 因为 SO 的当前 URL 没有 URL 片段。您可以在 URL 中有哈希的网站上对此进行测试。【参考方案2】:

这应该适合你

var str="https://example.com/faq#question-1#question-2#question-3#question-n";
var trimmedStr = str.split("#").slice(0,2).join("#");
console.log(trimmedStr);

这会删除第一个哈希之后的所有哈希。

【讨论】:

【参考方案3】:

你可以使用类似的东西 -

location.hash = '#'+location.hash.split('#')[1]

【讨论】:

以上是关于如何删除除第一个之外的所有 URL 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery删除除第一行之外的所有表行

删除 VIM 中除第一列之外的所有内容

jQuery:查找重复的 ID 并删除除第一个之外的所有 ID

如何从表中删除除前两个和最后一个之外的所有行?

如何从数组中删除除javascript中的第一个元素之外的所有元素

使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点