2016-06-15 12 views
0

jQueryでセレクタを使用するときに、変数にエスケープ文字(つまりピリオド)の問題があります。これをすべて入力するつもりでしたが、Chromeのコンソールウィンドウのスクリーンショットを撮るほうが簡単でした。jQuery変数のエスケープ文字が機能しない

Chrome Console Screenshot

変数とクリアテキストのバージョンが一致するように見えます。 $('#jeffrey\\.lamb')がdivを返すように、$('#'+escName)がdivを返すと期待しています。それはしません。どうして?

+0

「escName」にバックスラッシュが多すぎるように見えます。 '' jeffrey \\。lamb "' 'jQuery/Sizzleがエスケープとして認識するためには' .'の前に文字列内にバックスラッシュが1つ必要です。 – Pointy

+0

これが私が最初に試したことです。私は変数で使用されたときにエスケープを避けなければならなかった時代(perlで考える)があったので、私はそれも与えました。 –

+2

それは私のために働いています。あなたの質問を編集し[最小限の、完全で、かつ証明可能な例](http://stackoverflow.com/help/mcve)を提供してください。 – Xufox

答えて

1

文字列の値を調べる個々のパーサーに関して考える必要があります。最初のものはJavaScriptパーザ自体です。バックスラッシュ文字は文字列文法で意味を持ちます。したがって、文字列にバックスラッシュを1つだけ使用する場合は、2倍にする必要があります。

文字列がソース文字列値に解析された後、その内容(この場合)に注意する次のものは、CSSセレクタエバリュエータです(SizzleまたはネイティブquerySelectorコードこのようなエスケープ文字列の場合はどの文字列かを確認してください)。そのコードは、クラス名の一致を導入するものとして解釈されないように、.を引用するためにバックスラッシュを1つだけ必要とします。

したがって、escName = "jeffrey\\.lamb";はこの場合にすべて必要です。

関連する問題