未捕获的错误:语法错误,无法识别的表达式:不支持的伪:[重复]
Posted
技术标签:
【中文标题】未捕获的错误:语法错误,无法识别的表达式:不支持的伪:[重复]【英文标题】:Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: [duplicate] 【发布时间】:2013-04-11 05:35: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
为什么?
【问题讨论】:
【参考方案1】:你可以试试
$(document.getElementById('j_idt8:beginDateTxt')).mobiscroll().date(theme: 'android-ics light', mode:'scroller', display: 'bottom');
一般来说,jQuery 在其$()
函数中使用类似 CSS 选择器的东西。在 CSS 选择器中,:
表示伪类。但是,在您的情况下,:
只是 id 的一部分。
如果您使用通用 getElementById()
,则参数不会分解,而是完全被视为一个 ID。因此,通过使用getElementById()
并用$()
包装结果,您可以规避这种“误解”。
不过,总的来说,我认为更改 JSF 中的命名空间方案会更好。
编辑
jQuery documentation on selectors 声明您应该使用 \\
转义特殊字符:
使用任何元字符(例如 !"#$%&'()*+,./:;?@[]^`|~ )作为 a 的文字部分名称,必须用两个反斜杠转义:\。例如带有
id="foo.bar"
的元素,可以使用选择器$("#foo\\.bar")
。
这将导致丹尼尔已经给出的答案,在我看来,它优于上面给出的答案。但是,这种解释仍然有效。
$("#j_idt8\\:beginDateTxt").mobiscroll().date(theme: 'android-ics light', mode:'scroller', display: 'bottom');
【讨论】:
我以为我们使用的是 jQuery 选择器所以我们不使用 getElementById @BobSort 这里的问题是,id 包含一个:
,这使 jQuery 认为使用了伪类,结果失败。为了规避我使用了getElementById()
,它将其参数解释为字符串。
它有效。但是,我认为使用 jquery 的好处之一是我们不必使用 getelementbyid。而不是从 d.getelem...() 的返回中构建一个 jquery 节点,真正的解决方案是正确转义 jquery 选择器中的字符串。
我完全忘记了转义冒号 (:)。我正在逐字使用代码中的 id 并慢慢发疯。谢谢提醒!【参考方案2】:
如果您想使用 jQuery id 选择器,您需要使用 \
转义 :
,然后转义 \
(双转义)
这里:
$(function()
$("#j_idt8\\:beginDateTxt").mobiscroll().date(
theme: 'android-ics light',
mode:'scroller', display: 'bottom'
);
);
【讨论】:
我更喜欢这个。只是回答问题哈哈。以上是关于未捕获的错误:语法错误,无法识别的表达式:不支持的伪:[重复]的主要内容,如果未能解决你的问题,请参考以下文章
作为 ID 的 JQuery 变量导致未捕获错误:语法错误,无法识别的表达式:'#cell32'
如何防止 jQuery tablesorter 中的“未捕获的异常:语法错误,无法识别的表达式”?
未捕获的错误:语法错误,无法识别的表达式:select:[id * =“devices_0_command”] [关闭]