Подтвердить что ты не робот

Удалить хэш из 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-адреса и, возможно, из вселенной? (только для первой страницы!)

4b9b3361

Ответ 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...
});