2011-02-02 42 views
8

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

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> 
+0

我不太清楚你想做什么,说实话。你的代码似乎运行良好。 – Kobi 2011-02-02 08:48:16

+0

duplicity http://stackoverflow.com/questions/680785/on-window-location-hash-change – 2011-02-02 09:00:26

回答

19

加入

return false; 

在您的点击功能结束时,它会阻止此事件传播

-1

试试这个....这将在全球范围删除#在您的网址

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

这里是DEMO

+4

`example.html#something` - >`example。htmlsomething`?可能不是一个好主意`:)` – Kobi 2011-02-02 08:43:22

+0

不,它不像我已经写在本地文件中的相同的东西,所以我只是复制粘贴,并做了这个错误:) – Vivek 2011-02-02 08:44:32

3

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

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

localScroll插件的工作原理是通过搜索hashtag并使用jQuery scrollTo插件滚动到该位置,并在单击具有散列标签的链接时阻止浏览器的默认行为。他们并没有真正改变网址去除散列,他们阻止了它的出现。

,如果你想删除的哈希从URI是只保留#结束时,你能做的最好的:

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

尽管在一些旧的浏览器,即使这将触发页面重载(尽管只有很老的浏览器)。