2009-07-01 6 views
3

完全に初歩的なものが欠けているようです。私が達成しようとしていることは、かなり一般的なケースのように見えます。それで、どうして簡単な方法がないのか疑問に思います。強制的にページをリフレッシュして#sectionにジャンプ

問題はJavaScriptから現在のページを最新表示し、同時に#sectionに着陸したいということです。私が単純に行った場合:

document.location.href = document.location.href + "#section"; 

私がテストしたすべてのブラウザは、その#section(リロードなし)にスクロールするだけです。それはある意味で意味があります。ただ、完全を期すために、私は

document.location.assign(document.location.href + "#section"); 

をすれば、それは(驚くことではないが、それは確かに同じ機能を内部的に沸く)同じことを行います。最後に、documentオブジェクトにはdocument.reload()関数もあるようですが、これはリロードを強制するかどうかを指定するオプションのboolean引数をとりますが、明らかに#sectionを指定することはできません。私は(これらのメソッドを使用して)見つけることができる唯一の方法は、以下の組み合わせだった。

document.location.assign(document.location.href + "#section"); 
document.location.reload(); 

しかし、あなたはおそらく推測しているとして、それは、実際に3回をスクロールするために、ブラウザの原因とリロードをスクロールしているので、それは、理想的ではありません最終的には。

私はそこに方法があることを知っています:サーバー側のリダイレクトや独自のランダムなクエリ文字列パラメータの追加などがありますが、単純な方法はないと思われます。

+1

は明らか質問です:なぜ世界でページをリロードする必要がありますか? –

答えて

1

これは、ロケーションオブジェクトの「ハッシュ」値です。あなたはが絶対必要がある場合は

function scrollToElement(elem) { 
    if(typeof elem == 'string') elem = document.getElementById(elemId); 
    var top = 0; 

    if(elem) { 
     if(elem.offsetParent) { 
      top = elem.offsetTop; 

      while(elem = elem.offsetParent) { 
       top += elem.offsetTop; 
      } 
     } 

     window.scrollTo(0, top); 
    } 

} 

...それは一貫して動作しない場合は、あなたがscrollToElement機能を使用して検討する必要があります

location.hash = "#section"; 

...このようにそれを設定する必要がありますページのリロード(なぜあなたは今まででしょうかわからない)、自分自身でウィンドウを開いてみてください...

window.open(location.href + '#section', '_top'); 

または交換してみてください...

はるかに簡単な解決策はあり
location.replace(location.href + '#section'); 
+0

ありがとうございます。私はwindow.open()については考えていませんでしたが、私はそれをテストしました。私が間違っていなければ、同じように動作します。それはただスクロールし、完全なリロードをトリガーしません。 –

+0

私はそれがおそらくちょっと怪しい(リアルロードを強制する)と聞こえることを知っています、そしてそれはおそらく私はそれを後で変更するでしょう。しかし、それは私が取り組んでいるアプリケーションの最初のバージョンのためであり、優先順位はいくつかの完全な作業バージョンを持っているし、詳細を磨くことです。しかし、いずれにせよ、私はJavaScriptで簡単にやりたいと思っていたことは、結局は簡単ではないことに驚いていました。 –

0

if (document.location.href.match(/[?]/)) 
    document.location.href = document.location.href + '&fake_param=' + Math.random() + '#section' ; 
else  
    document.location.href = document.location.href + '?fake_param=' + Math.random() + '#section' ; 
+0

ゴミ箱にゴミ箱がありますか?いいえ、結構です。 –

関連する問題