Удалить только последний хеш URL, который был добавлен с помощью window.location.hash - PullRequest
0 голосов
/ 10 февраля 2019

У меня проблема с модальным блоком, который при открытии добавляет хэш к текущему URL (который может иметь другие хэши)

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#About

при модальныхclose: 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();   
   } 
 });

Iпросто хочу полностью удалить последний добавленный хеш (без #) без перезагрузкиг страницы.

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете использовать регулярное выражение, чтобы найти последний "хеш" в вашем URL:

 > "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), с любыми символами или числами после него.

...