2011-02-02 24 views
8

こんにちは。アドレスバーから#フラグメント識別子を削除する

私はちょうど得る

www.mydomain.com/example.html#something:私はアドレスバーからのフラグメント識別子を隠すので、代わりにしたい

www.mydomain.com /example.html

アンカータグをクリックすると、

私は多くの関連する質問やフォーラムを見てきましたが、まだそれを理解できません。私はかなり私が行に沿って何かを使用する必要があると確信しています:

window.location.href.replace(/#.*/,''); //and or .hash 

置くことはできません。

localScrollプラグインを使用すると、識別子を非表示または保持することができ、デフォルトでは非表示になります。私は多くのギャラリープラグインも同様のオプションがあると思います。

私は自分で試してみると(初心者のビット)、私は結果に狂ってしまいます。以下

は、私はそれが仕事したいいくつかの基本的なスクリプトの例である:それはあなたのURLでグローバルに#を削除します....

<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

+0

二重性http://stackoverflow.com/questions/680785/on-window-location-hash-change –

答えて

19

追加

return false; 

クリックの最後にこのイベントの伝播を停止します。

+1

+1 - 私はハッシュタグのものについて大きな長い答えを投稿しましたが、実際に彼のコードを読んで、私はあなたのソリューションは彼に彼が望む動作を与えることがわかります。 :-) –

+0

ありがとう、とても迷惑だったので、それは簡単でした。私は他の人々の質問を見て、Googleが私に混乱して、sidetracked – thom

+0

このanswer.itのおかげで感謝私の日を保存したと思う。 – Montiyago

-1

はこれを試して

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

DEMO

です
+4

'example.html#something' - >'例。htmlsomething'?おそらく良い考えではない: ') – Kobi

+0

ローカルファイルに同じものを書いたので、私はちょうどそれをコピーしてこのミスをコピーしてしまったのです。 – Vivek

+1

replace関数は* new *文字列を置き換えて返します。結果をどこかに割り当てる必要があります。 –

3

replace関数は新しい文字列を返しますが、古い文字列では機能しません。あなたは:window.location.href = window.location.href.replace(/#.*/,'')を使用する必要があります。

しかし、ハッシュタグを追加または変更するだけではなく、window.location.hrefを変更するとページが再読み込みされるため、これは期待される効果がありません。

localScrollプラグインは、ハッシュタグを検索し、jQuery scrollToプラグインを使用してその場所にスクロールし、ハッシュタグ付きのリンクをクリックしたときにブラウザのデフォルトの動作を妨げるように機能します。彼らは実際にハッシュを削除するためにURLを変更していない、彼らはそれが出現するのを妨げてきた。

あなたはURIからハッシュを削除したい場合は、あなたができる最善の終わりにちょうど#を維持することです:

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

一部の古いブラウザでは、これでもページのリロードをトリガしますが(しかし、非常に古いブラウザだけです)。

+0

falseを返します。何が必要なのか、あなたの答えに感謝します。 localScrollが何をしていたのか、なぜ私が試していたものがうまくいかなかったのかを説明するのに役立ちました。 – thom

関連する問題