从地址栏中删除#fragment标识符

时间:2011-02-02 08:37:34

标签: javascript jquery

嗨,我希望有人可以提供帮助。我想隐藏地址栏中的片段标识符,而不是:

www.mydomain.com/example.html#something

我得到:

www.mydomain.com/example.html

当我点击锚标签时。

我看了很多相关的问题和论坛,但仍然无法弄明白。我很确定我应该使用以下内容:

window.location.href.replace(/#.*/,''); //and or .hash
只是无法弄明白。

localScroll插件允许您隐藏或保留标识符,默认情况下它们是隐藏的。我认为很多画廊插件也有类似的选择。

但是当我自己尝试(新手的一点点)时,我发疯到没有结果。

下面是我希望它可以使用的一些基本示例脚本:

<style>
.wrap{
width:300px;
height:200px;
margin:auto;
}

.box{
width:300px;
height:200px;
position:absolute;
display:none;
}

#one{background:red;}
#two{background:blue;}
#three{background:green;}

.load{display:block;}
</style>


<body>
<ul>
    <li><a href="#one">One</a></li>
    <li><a href="#two">Two</a></li>
    <li><a href="#three">Three</a></li>
</ul>

<div class="wrap">
    <div id="one" class="box load">This is Box 1</div>
    <div id="two" class="box">This is Box 2</div>
    <div id="three" class="box">This is Box 3</div>
</div>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$(document).ready(function() {

$("ul li a").click(function(){

       $("div.box").fadeOut(1000);

       $($(this).attr('href')).fadeIn(1000);

    });
});
</script>
</body>

3 个答案:

答案 0 :(得分:19)

添加

return false;

在点击功能结束时,它将停止此事件传播

答案 1 :(得分:3)

replace函数返回一个新字符串,它不对旧字符串进行操作。您需要使用:window.location.href = window.location.href.replace(/#.*/,'')

但是,这不会产生预期的效果,因为以任何方式更改window.location.href不仅仅是添加或更改哈希标记会导致页面重新加载。

localScroll插件的工作原理是搜索hashtag并使用jQuery scrollTo插件滚动到该位置,并在单击带有哈希标记的链接时阻止浏览器的默认行为。他们实际上没有更改URL以删除哈希,他们已经阻止它出现。

如果你想从URI中删除哈希值,你可以做的最好的事情就是只保留最后的#:

window.location.href = window.location.href.replace(/#.*/,'#');

虽然在某些旧版浏览器中,即使这样也会触发页面重新加载(但只有非常旧的浏览器)。

答案 2 :(得分:-1)

试试这个......它会在你的网址中删除#global

window.location.href.replace(/\#*/g, "")

这里是DEMO