用于选择的jQuery选择器ID:1

我有以下选择与不寻常的ID /名称属性:

 

这似乎不允许我选择它:

 unit = $('#customfield_10021:1 option:selected').text(); 

http://jsfiddle.net/stzPQ/

 uncaught exception: Syntax error, unrecognized expression: 1 

如何选择此字段? 我以前从未见过这种特殊的语法,但它显然适用于提交。

谢谢!

贾里德

逃避:使用\\

 unit2 = $('#customfield_10021\\:1 option:selected').text(); 

更新了jsfiddle

或者您可以使用document.getElementById("customfield_10021:1")作为选择器的上下文。

 var s = document.getElementById("customfield_10021:1"); unit2 = $('option:selected', s).text(); 

你应该逃避冒号,所以这样做:

 $("#customfield_10021\\:1") 

你有:

 unit = $('#customfield_10021\\:1 option:selected').text(); 

那是因为冒号是一个特殊的角色,需要用反斜杠进行转义。 希望这可以帮助。 干杯

逃离冒号:

 unit = $('#customfield_10021\\:1 option:selected').text(); 

请参阅jQuery FAQ 。


而不是使用option:selected您可能只想使用.val()来获取的值:

 unit = $('#customfield_10021\\:1').val(); 

试试这个:

 unit = $('#customfield_10021\\:1 option:selected').text(); 

:通常用于伪选择器,反斜杠需要在字符串文字中加倍。

为避免疑义,冒号字符在ID和Name属性中是合法的

这有效:

 $('[id="customfield_10021:1"] option:selected').text() 

现场演示: http //jsfiddle.net/stzPQ/2/

我觉得有效:

 unit = $("#customfield_10021\\:1 option:selected").text(); 

请记住,使用冒号来区分伪类,就像使用option:selected您必须从元素的id中删除冒号:

  

这是因为jQuery试图使用#customfield_10021:1作为id = customfield_10021 ,伪类为1 ,这是不存在的,因此是错误。

JSF中的另一个解决方案是防止表单名称在每个id之前添加。

这可以使用表单标记中的prependId =“false”来完成: