36

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

为什么?

4

2 回答 2

64

你可以试试

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

一般来说,jQuery 在其$()函数中使用类似 CSS 选择器的东西。在 CSS 选择器中,:表示伪类。但是,在您的情况下,这:只是 id 的一部分。

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

但是,总的来说,我认为更改 JSF 中的命名空间方案会更好。

编辑

关于选择器的jQuery 文档指出,您应该使用以下命令转义特殊字符\\

要使用任何元字符(例如 !"#$%&'()*+,./:;<=>?@[]^`{|}~ )作为名称的文字部分,它必须使用两个反斜杠进行转义:\。例​​如,带有 , 的元素id="foo.bar"可以使用选择器$("#foo\\.bar")

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

$("#j_idt8\\:beginDateTxt").mobiscroll().date({theme: 'android-ics light', mode:'scroller', display: 'bottom'});
于 2013-04-18T07:50:01.897 回答
32

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

这里:

$(function() {
    $("#j_idt8\\:beginDateTxt").mobiscroll().date({
        theme: 'android-ics light',
        mode:'scroller', display: 'bottom'
    });
});
于 2013-04-18T08:18:07.243 回答