仅删除URL的最后一个哈希,该哈希是在window.location.hash中添加的

时间:2019-02-10 15:16:48

标签: javascript jquery url hash window.location

我对模式框有问题,该模式框在打开时会向当前网址添加一个哈希(可能还会有其他哈希)

01

这段代码对我来说很好用,但是在删除哈希后留下“#”

window.location.hash = location.hash.replace(/#About/, '');

示例 模式打开时: www.mywebsite.com/#products#关于

模式关闭时: www.mywebsite.com/#products#

我想要得到的东西: www.mywebsite.com/#products


02

也可以尝试这种效果很好但可以消除以前所有哈希值的方法

history.pushState("", document.title, window.location.pathname);

history.pushState("", document.title, window.location.pathname + window.location.search);

结果:

模式打开时: www.mywebsite.com/#products#关于

模式关闭时: www.mywebsite.com(我不希望删除以前的哈希)


这是我的代码:

$(".barMenuFooter a.buttonShowDetail").on('click', function(){  
$(this).toggleClass('active');
if ($(this).hasClass("active")) {
    window.location.hash = location.hash + "#About";
    openAbout();    
}
 else {
    window.location.hash = location.hash.replace(/#About/, '');
    closeAbout();   
   } 
 });

我只想完全删除最后添加的哈希(不带#),而无需重新加载页面。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式在网址中查找最后的“哈希”:

 > "site.com/#place1/#place2".replace(/\#$|\#[A-z0-9]*$/, "")
 'site.com/#place1/'

 > "site.com/#place1#".replace(/\#$|\#[A-z0-9]*$/, "")
 'site.com/#place1'

 > "site.com/#place1/#".replace(/\#$|\#[A-z0-9]*$/, "")
 'site.com/#place1/'

/\#$/将匹配出现在字符串(url)末尾的最后一个哈希(#)。

/\#[A-z0-9]*$/这将匹配出现在字符串(url)末尾的最后一个哈希(#)及其后面的任何字符或数字。