2017-01-16 9 views
0

jQueryを使用して、自分のウェブサイトのアンカーにスムーズにスクロールさせています。アンカーは、»ü、ä、ö«やその他のユニコード文字などのドイツ語のウムラウトを含むことができるようにプログラムで作成されます。 この関数は、ハッシュが参照する要素を選択するためにハッシュを使用します。jQueryセレクタではどのような文字が使用できますか?

// Smooth scroll to anchor position. 
function smoothScroll (hash) { 

    var scrollTo = typeof $(hash).offset().top != undefined ? $(hash).offset().top: 0; 

    $('html, body').animate({ 
    scrollTop: scrollTo 

    }, 800); 
} 

// Test smooth scroll. 
smoothScroll ("#Akademie-für-Gestaltung"); 

これはChromeとSafariでは動作しますが、Firefoxでは動作しません。次のエラーが発生します。

Error: Syntax error, unrecognized expression: #Akademie-f%C3%BCr-Gestaltung... 

これは私の質問につながります。どのキャラクタがjQueryセレクタで使用できるのかをどのように知ることができますか? jQuery documentationには次の文字のみが記載されています!"#$%&'()*+,./:;<=>[email protected][\]^{|}~

セレクタがすべての最新のブラウザで機能することを確認するには、どのように他の文字をエスケープする必要がありますか?

+0

'-'はメタ文字です。セレクタとして使用している間は、エスケープする必要があります。 –

+1

@RajaprabhuAravindasamy:いいえ、CSSセレクタで '-'をエスケープする必要はありません。 – CBroe

+0

_ "jQueryセレクタではどの文字が使用できるのですか? "_ _まず、jQueryのドキュメントをチェックします。 https://api.jquery.com/category/selectors/ – CBroe

答えて

2

How do I know, which characters are allowed in jQuery selectors?

これらはCSSセレクタです。詳細はthe selectors specificationです。セレクタで使用されるリテラルIDとクラス名の規則はhereです。エスケープでは、文字通り使えなかった文字を使用できます(ただし、痛みですので避けるのが最善です)。たとえば、üを使用することはできますが、そのまま使用することはできないため、逃げなければなりません。

しかし、IDセレクタは単なる特別な(非常に高速な)種類のセレクタです。 attribute selectorは引用符で囲むことができます。つまり、エスケープを避けることができます。$('[id="Akademie-f%C3%BCr-Gestaltung"]')これは完全に有効で正しいものです。

+0

説明してくれてありがとう!私はjQueryを避けても 'document.getElementById(hash)'を使用すると、それも動作することがわかりました。 – user5950

+1

@ user5950:いいえ、それはちょうど 'getElementById'がセレクタを取らない、それはIDをとるので問題はありませんが、CSS IDセレクタ(' #foo ')は、エスケープせずに使うことができる、許容される文字の小さなセットだけの特殊なものです。あなたは便利なユーティリティfunc :$ .gid = function(id){var e = document.getElementById(id); eを返す? $(e):$(); }; '次に:' $ .gid( "Akademie-f%C3%BCr-Gestaltung")。show(); 'またはそれに類するもの。そうすれば、IDの内容を気にせずに 'getElementById'の速度を得ることができます。 –

関連する問題