从url中删除哈希

时间:2010-12-22 11:13:28

标签: javascript ajax fragment-identifier

我是ajax-ifying在我的一个项目中的分页,因为我希望用户能够为当前页面添加书签,我通过哈希附加页码,比如说:

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

hyperlink上的那个它工作正常以及所有内容,除了页码为1时,我不希望URL成为/products#p=1,我只是希望它是/products

我试过这些变化:

  1. window.location.hash=''可以使用,但网址现在就像/products#一样,而且我不太喜欢那里的哈希。
  2. 根本没有使用window.location.hash,但当用户从第3页回到第1页时,他在第1页,但是网址仍为/products#p=3,因为我没有弄乱散列。
  3. 谷歌搜索这导致我几分钟(约15)愚蠢的论坛,问题被正确地问,但答案是建议页面跳跃,因为线程创建者有像<a href="#">的href哈希他应该使用javascript:void(0)代替。 (他们从未听说过Ajax吗?)
  4. 所以最后,我决定制作这个帖子,我在这里发现了几个相似的帖子,但所有答案都与我的第二点非常相似。

    所以我的一个大问题仍然是一个问题:如何从网址中挖出哈希,可能还要离开宇宙? (仅限第一页!)

5 个答案:

答案 0 :(得分:92)

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

答案 1 :(得分:52)

更新了答案

实现此目标的最佳方法是关注Homero Barbosaanswer below

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

...但是这会为你刷新页面,这对你来说似乎有点小事。咧嘴笑似乎是最好的选择。

答案 2 :(得分:5)

var urlWithoutHash = document.location.href.replace(location.hash , "" );

答案 3 :(得分:4)

完美地为我工作

View page source

答案 4 :(得分:3)

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