web-dev-qa-db-ja.com

不明なエラー:構文エラー、認識できない式:サポートされていない擬似:

私はtxtBoxを持っており、そのIDは:beginDateTxt

しかし、jsfはそれをj_idt8:beginDateTxt

jqueryで私はそのように到達しようとします

  <script type="text/javascript">
            $(document).ready(function() {
                $(function() {
                    $("#j_idt8:beginDateTxt").mobiscroll().date({
                       theme: 'Android-ics light', mode:'scroller', display: 'bottom'
                    });
                });

            });
   </script>

しかし、私は以下のエラーになります:

不明なエラー:構文エラー、認識できない式:サポートされていない擬似:beginDateTxt

どうして?

32
user2294016

試すことができます

_$(document.getElementById('j_idt8:beginDateTxt')).mobiscroll().date({theme: 'Android-ics light', mode:'scroller', display: 'bottom'});
_

一般に、jQueryは$()関数でCSSセレクターのようなものを使用します。 CSSセレクターでは、_:_は擬似クラスを示します。ただし、あなたの場合、_:_はidの一部にすぎません。

ジェネリックgetElementById()を使用する場合、引数はnot分解されますが、IDとして完全に表示されます。したがって、getElementById()を使用し、結果を$()でラップすると、この「誤解」を回避できます。

ただし、一般的に、JSFのネームスペーススキームを変更する方が良いと思います。

[〜#〜] edit [〜#〜]

セレクタに関するjQueryドキュメント は、_\\_を使用して特殊文字をエスケープする必要があることを示しています。

任意のメタ文字(! "#$%& '()* +、。/ :; <=>?@ [] ^` {|}〜)を名前のリテラル部分として使用するには、 2つのバックスラッシュでエスケープする必要があります:\。たとえば、_id="foo.bar"_を持つ要素は、セレクタ$("#foo\\.bar")を使用できます。

これは、ダニエルによって既に与えられた答えにつながります。私の意見では、それは上記の答えよりも優れています。ただし、説明は引き続き有効です。

_$("#j_idt8\\:beginDateTxt").mobiscroll().date({theme: 'Android-ics light', mode:'scroller', display: 'bottom'});
_
62
Sirko

JQuery IDセレクターを使用する場合は、:\でエスケープしてから、\をエスケープする必要があります(二重エスケープ)

ここに:

$(function() {
    $("#j_idt8\\:beginDateTxt").mobiscroll().date({
        theme: 'Android-ics light',
        mode:'scroller', display: 'bottom'
    });
});
31
Daniel