2011-11-12 27 views
3

私はdivのリストを持っていますが、それぞれIDを持っています。 idはリンクとしても機能します:"http://en.wikipedia.org/wiki/" + idは、この項目のリンクです。"/image/" + id + ".jpg"は、この項目のローカルイメージです。jqueryの特殊文字

しかし、私には特殊文字のあるIDがあります。私はバグがあることが判明した2つのタイプがあります:最初に、A_(B)、括弧を含む、A%C3%A9B(AéB)、特殊文字を含む。 ()%28%29に置き換えることができるので、基本的には1つのタイプに過ぎません。そして、私はテストしました。この種の名前は画像とwikiのリンクのために働きます。

問題は、jQueryを使用すると、$('#' + id)は特殊文字を持つオブジェクトを見つけることができないということです。誰もそれに対処する方法を考えている?

答えて

0

詳細はthis SO questionを参照してください。

個人的には、IDは人間が判読可能でわかりやすいIDに準拠する必要があります。 jQueryの$.dataなどの異なるメカニズムを使用してURLを添付するか、有効性の制限がない別のプロパティを使用することを検討してください。

var id = encodeURIComponent(id); 
$('#' + id); 

を、それを解決するかどうかを確認するために:

+0

私はそう信じているそれははるかに簡単になります私はレコードにタイトルを使用。。。代わりにそのリンク名を入力してください。 – DrXCheng

1

は、あなたが試してみましたか?

+0

これは役に立ちましたか? –

2

selectorsページの2番目の段落を見ると、これらの文字が使用されるときにエスケープする必要があることが示されています(!"#$%&'()*+,./:;<=>[email protected][\]^``{|}~)。

他の文字を含める場合は、エスケープコードを使用するのが最善の方法です(google closure compilerが自動的にこれを行います)。したがって、この書簡éは、\u00e9

0

で置き換えることができます。最初の適切なルールは、関連する仕様に準拠することです。 HTML 4.01によれば:

IDとNAMEトークンは文字で始まる必要があります([A-ZA-Z])と文字、数字([0-9])、ハイフンの任意の数(続く であってもよいです" - ")、 アンダースコア( "_")、コロン( ":")、およびピリオド( "。"

要素のIDや名前には(、)や%などの文字は使用できません。

idsの非適合文字は、jQuery以外の問題を引き起こす可能性があります。 encodeURIComponentを使用してください(たとえば、%28で置き換える)は、%文字も許可されていないため役立ちませんが、通常のaz、AZ範囲外の文字の文字エンティティを使用することができます。昔ながらののdocument.getElementById、あなたが本当にjQueryのを使用する必要がある場合:

$(document.getElementById(id)) 

は、十分な(しかし、信頼性がない)とすることができる