Удалить хэш из URL-адреса
Я являюсь ajax-ifying разбиением на страницы в одном из моих проектов, и поскольку я хочу, чтобы пользователи могли добавлять закладки на текущую страницу, я добавляю номер страницы через хеш, скажем:
onclick="callPage(2); window.location.hash='p=2'; return false;"
и thats на hyperlink
он работает отлично и все, кроме того, когда номер страницы равен 1, я не хочу, чтобы URL
был /products#p=1
, я просто хочу, чтобы он был /products
Я пробовал эти варианты:
-
window.location.hash=''
работает, но url теперь похож на /products#
, и я не совсем хэш там.
- вообще не использовать window.location.hash, но когда пользователь возвращается на страницу 1, например, на стр. 3, он находится на первой странице, но url по-прежнему
/products#p=3
, так как я не возился с хэшем.
- Поиск Google по этому поводу привел меня к нескольким минутам (около 15) глупых форумов, на которых вопрос был задан правильно, но ответы предполагали, что страница перескакивает, потому что создатель потока имел хэш в href как
<a href="#">
, и он должен вместо этого используйте javascript:void(0)
. (разве они никогда не слышали об Аяксе?)
Итак, наконец, я решил сделать этот поток, здесь я нашел несколько подобных потоков, но все ответы очень похожи на мою вторую точку.
поэтому мой большой вопрос по-прежнему остается вопросом: как удалять хэш из URL-адреса и, возможно, из вселенной? (только для первой страницы!)
Ответы
Ответ 1
Обновленный ответ:
Лучший способ добиться этого - следовать Homero Barbosa ответить ниже:
history.pushState("", document.title, window.location.pathname);
... или, если вы хотите сохранить параметры поиска:
history.pushState("", document.title, window.location.pathname + window.location.search);
Оригинальный ответ, не используйте это, badwrongfun:
var loc = window.location.href,
index = loc.indexOf('#');
if (index > 0) {
window.location = loc.substring(0, index);
}
... но это обновляет страницу для вас, которая кажется пустяковой грубой после того, как только что прибыла туда. Grin и медведь это, кажется, лучший вариант.
Ответ 2
history.pushState("", document.title, window.location.pathname);
Ответ 3
var urlWithoutHash = document.location.href.replace(location.hash , "" );
Ответ 4
function removeHash () {
var scrollV, scrollH, loc = window.location;
if ("pushState" in history)
history.pushState("", document.title, loc.pathname + loc.search);
else {
// Prevent scrolling by storing the page current scroll offset
scrollV = document.body.scrollTop;
scrollH = document.body.scrollLeft;
loc.hash = "";
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scrollV;
document.body.scrollLeft = scrollH;
}
}
Ответ 5
Работали для меня отлично
$(window).on('hashchange', function(e){
window.history.pushState("", document.title, window.location.pathname);
// do something...
});