2011-02-06 7 views
3

urlに属性 "#"が付加されている場合、javascriptでどのように検出できますか?urlに属性 "#"が付加されている場合、どうすればjavascriptで検出できますか?

クロスブラウザソリューションが必要です。私は現在、次のコードを使用していますが、それは、Firefoxでのみ動作します。

if ((window.location.hash) || (window.location.hash != "#")) 
    window.scrollBy(0,-60); 

おかげ

+0

どのブラウザに問題がありますか? w3schools(http://www.w3schools.com/jsref/prop_loc_hash.asp)によると、 'location.hash'はすべての主要なブラウザで動作するはずです。 –

+0

@Martin Buberlだから理論的に私はif文の最初の部分だけを必要としていると言っていますか? window.location.hash? – aneuryzm

+0

彼はあなたのコードがすべてのブラウザで機能するはずだと言っていると思います。 –

答えて

1

次の行があなたのために仕事をする必要があります:W3Schoolsのlocation.hashによると

if(!!window.location.hash) // if 'true' you have an appending hash 
    window.scrollBy(0,-60); 

は、すべての主要なブラウザで動作するはずです。

+0

二重のものは何ですか? – Yehonatan

+0

最初の '!'は、ハッシュが定義されていないか空であるかどうかをチェックします。 URLにハッシュがある場合は 'false'を返します。これは、論理に合うように2番目の '! 'で否定されます。 'if(!window.location.hash == false)'と書くこともできます。 –

1

を使用すると、ハッシュプロパティはキーのブラウザでは動作しないことを発見している場合は、いつでもできただけで文字列の解析を行うと、単純な実装は次のようになります。

var url = window.location.href; 
var hashLoc = url.lastIndexOf('#'); 
if(hashLoc > -1 && hashLoc < url.length) 
    window.scrollBy(0,-60); 
3

まず、投稿されたコードに誤りがあるようです。あなたが共通string is neither null nor empty nor '#'パターンのためのつもりなら、それは次のようになります。

if (window.location.hash && window.location.hash != "#") 
    window.scrollBy(0,-60); 

言った、Location.hashは、よくサポートされているので、上記のコードは、すべての最新ブラウザで動作するはずです。

+0

と書くことができます。window.scrollBy(0、-60);クロスブラウザ?ハッシュはすべてのブラウザで正しく検出されるわけではありませんが、すべて同じ方法でスクロールしません。 – aneuryzm

+0

'scrollBy()'も広くサポートされています。ブラウザ間の不一致は、ページを不合格モードで表示することが原因である可能性があります。あなたの 'DOCTYPE'は何ですか? –

0

良いクロスブラウザサポートのためには、jQueryを使用できます。あなたのプロジェクトには残念なことかもしれませんが、全体的にjsの開発がはるかに簡単になります。私は数ヶ月間にわたり大きな成功を収めてきた優れたhashchangeプラグインがあります。