Javascript 未捕获错误:语法错误,无法识别的表达式:不支持的伪:

Javascript 未捕获错误:语法错误,无法识别的表达式:不支持的伪:,javascript,jsf,Javascript,Jsf,我有一个txtBox,它的id是:beginDateTxt 但是jsf使它成为j_idt8:beginDateTxt 在jquery中,我试图这样达到它 <script type="text/javascript"> $(document).ready(function() { $(function() { $("#j_idt8:beginDateTxt").mobiscroll().

我有一个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>

$(文档).ready(函数(){
$(函数(){
$(“#j#u idt8:beginDateTxt”).mobiscroll().date({
主题:“安卓ics灯”,模式:“滚动条”,显示:“底部”
});
});
});
但我得到以下错误:

未捕获错误:语法错误,无法识别的表达式:不支持的伪:beginDateTxt

为什么?你可以试试

$(document.getElementById('j_idt8:beginDateTxt')).mobiscroll().date({theme: 'android-ics light', mode:'scroller', display: 'bottom'});
一般来说,jQuery在其
$()
函数中使用类似CSS选择器的东西。在CSS选择器中,
表示一个伪类。但是,在您的例子中,
只是id的一部分

如果使用泛型的
getElementById()
,则参数不会被分解,而是被视为一个ID。因此,通过使用
getElementById()
并用
$()
包装结果,您可以避免这种“误解”

但是,总的来说,我认为最好在JSF中更改名称空间方案

编辑

说明应使用
\\
转义特殊字符:

若要将任何元字符(例如!“$%”和“()*+,./:;?@[]^`{124}~)用作名称的文字部分,必须使用两个反斜杠转义:\。例如,带有
id=“foo.bar”
的元素可以使用选择器
$(“\35; foo\\\.bar”)

这将导致丹尼尔已经给出的答案,在我看来,这个答案优于上面给出的答案。然而,解释仍然有效

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

如果要使用jQuery id选择器,需要使用
\
转义
,然后转义
\
(双转义)

在这里:


我以为我们正在使用jQuery选择器,所以我们不使用getElementById@BobSort这里的问题是,id包含了一个
,这使得jQuery认为使用了伪类,结果失败,它将其参数解释为字符串。它可以工作。但是,我认为使用jquery的好处之一是我们不必使用getelementbyid。而不是使用d.getelem的返回来构建jquery节点…(),一个真正的解决方案是正确地转义jquery选择器中的字符串。我完全忘记了转义冒号(:)。我从代码中逐字使用id,慢慢变得疯狂。谢谢提醒!我更喜欢这个。只回答问题lol。
$(function() {
    $("#j_idt8\\:beginDateTxt").mobiscroll().date({
        theme: 'android-ics light',
        mode:'scroller', display: 'bottom'
    });
});