私は私のプロジェクトのページネーションをajax化しており、ユーザーが現在のページをブックマークできるようにしたいので、ハッシュを介してページ番号を追加しています:
onclick="callPage(2); window.location.hash='p=2'; return false;"
hyperlink
のthatsは問題なく動作します。ただし、ページ番号が1の場合は、URL
を/products#p=1
にしたくないので、/products
にしたいだけです。
私はこれらのバリエーションを試しました:
window.location.hash=''
は機能しますが、URLは/products#
のようになりました。/products#p=3
です。<a href="#">
のようなhrefにハッシュを持っていて、javascript:void(0)
代わりに。 (彼らはAjaxのことを聞いたことがなかったのですか?)だから最終的に、私はこのスレッドを作ることにしました、私はここでいくつかの同様のスレッドを見つけましたが、すべての答えは私の2番目のポイントに非常に似ています。
したがって、私の大きな疑問はまだ疑問のままです。ハッシュをURLから、場合によっては宇宙から追い出す方法は? (最初のページのみ!)
更新された回答:
これを達成する最良の方法は、 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);
}
...しかし、それはあなたのためにページを更新します。ニヤリとそれは最良の選択肢のようです。
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;
}
}