Я хочу добавить хэш URL-адреса в атрибут href навигации:
<ul>
<li><a href = "/bla">Bla</a></li>
<li><a href = "/bli">Bli</a></li>
<li ><a href = "/blu">Blu</a></li>
</ul>
У меня есть такой код:
$(window).on('hashchange', function (e) {
console.info(location.hash);
$("a").attr('href', function(_, href){
return href + window.location.hash
});
});
if (window.location.hash) {
$(window).trigger('hashchange')
}
Теперь, когда я нажимаю на подменю или ввожу URL вручную с хешем, меню обновляется следующим образом:
<ul>
<li><a href = "/bla#hashVlaue">Bla</a></li>
<li><a href = "/bli#hashVlaue">Bli</a></li>
<li ><a href = "/blu#hashVlaue">Blu</a></li>
</ul>
Это работает. Но теперь, если я снова нажму на подменю, хеш будет добавлен, а не заменен. Поскольку при нажатии на подменю страница не перезагружается, ссылки начинают выглядеть так:
<a href = "/blu#hashOne#hashTwo#Three#Four">Blu</a>
Мне просто нужен один хеш, и если он уже есть, его следует заменить. Как мне это сделать?
замените строку return href + window.location.hash в триггере haschange на указанную выше
ну вот и все: D, черт возьми. можешь написать это как ответ?
Прохладный. Рад узнать, что помогло :)
проголосуйте за него и сделайте его зеленым: D

Вы всегда добавляете href в свой код. Проверьте строку href + window.location.hash в обратном вызове hashchange. Вот почему он всегда добавляется к предыдущему значению. Вам нужно
return href.split("#")[0] + window.location.hash
Ваше здоровье :)
Не знаю, правильно ли я понял вашу проблему. Но это то, что вам нужно, наверное,
return href.split("#")[0] + window.location.hash