Удалить хэш из URL - PullRequest
       6

Удалить хэш из URL

50 голосов
/ 22 декабря 2010

Я использую ajax для разбивки на страницы в одном из моих проектов, и, поскольку я хочу, чтобы пользователи могли создавать закладки для текущей страницы, я добавляю номер страницы с помощью хеша, скажем:

onclick="callPage(2); window.location.hash='p=2'; return false;"

и вот на hyperlink он работает нормально и все, кроме того, что когда номер страницы равен 1, я не хочу, чтобы URL было /products#p=1, я просто хочу, чтобы оно было /products

Я попробовал эти варианты:

  1. window.location.hash='' работает, но URL теперь похож на /products#, и я не совсем хэш там.
  2. вообще не использует window.location.hash, но когда пользователь возвращается, скажем, со страницы 3 на страницу 1, он находится на первой странице, но URL-адрес по-прежнему /products#p=3, поскольку я не связываюсь с хэшем.
  3. Поиск в Google по этому поводу привел меня к нескольким минутам (около 15) глупых форумов, где вопрос был задан правильно, но ответы предполагали, что страница переходит, потому что создатель потока имеет хеш в href, такой как <a href="#">, и он должен используйте вместо этого javascript:void(0). (Разве они никогда не слышали об Аяксе?)

Итак, наконец, я решил создать эту тему, я нашел здесь несколько похожих тем, но все ответы очень похожи на мою вторую точку.

так что мой большой вопрос все еще остается вопросом: как выкинуть хеш из URL и, возможно, из вселенной? (только для первой страницы!)

Ответы [ 5 ]

92 голосов
/ 10 марта 2012
history.pushState("", document.title, window.location.pathname);
53 голосов
/ 22 декабря 2010

Обновленный ответ :

Лучший способ добиться этого - следовать 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);
}

... но это обновляет страницу для вас, которая кажется немного грубой после того, как вы просто приехали туда.Улыбка и терпение, кажется, лучший вариант.

5 голосов
/ 27 сентября 2013
var urlWithoutHash = document.location.href.replace(location.hash , "" );
4 голосов
/ 16 июня 2016

работал для меня отлично

$(window).on('hashchange', function(e){
  window.history.pushState("", document.title, window.location.pathname);  
 // do something...
});
3 голосов
/ 28 октября 2015
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's 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;
    }
}
...