从url中删除哈希

我是ajax-ifying在我的项目之一分页,因为我希望用户能够书签当前页面,我通过散列附加页码,说:

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,但是当用户回到第一页,比如说第三页,他在第一页,但是url仍然是/products#p=3因为我没有搞乱散列。
  3. 谷歌search导致我几分钟(约15)愚蠢的论坛问题的问题是正确的,但答案是build议页面跳转,因为线程创build者有一个HREF的哈希像<a href="#">和他应该使用javascript:void(0)来代替。 (他们从来没有听说过阿贾克斯?)

所以最后,我决定做这个线程,我在这里发现了几个类似的线程,但所有的答案都非常类似于我的第二点。

所以我的大问题仍然是一个问题:如何将哈希从url中排除,甚至可能离开宇宙? (只为第一页!)

已更新答案

最好的办法是遵循下面的 Homero Barbosa的回答 :

 history.pushState("", document.title, window.location.pathname); 

…或者,如果你想保持search参数:

 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); } 

…但是,刷新你的页面,这似乎是刚刚到达那里粗鲁的粗鲁。 咧嘴一笑,似乎是最好的select。

 history.pushState("", document.title, window.location.pathname); 
 var urlWithoutHash = document.location.href.replace(location.hash , "" ); 

为我完美工作

 $(window).on('hashchange', function(e){ window.history.pushState("", document.title, window.location.pathname); // do something... }); 
 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; } }