我有一个JSF应用程序,它生成一个带有标签的页面:
<label for="_idJsp0:question" class="left">Question</label>
然后在DOM中的其他地方是组件:
<td><textarea rows="7" cols="25" id="_idJsp0:question" name="_idJsp0:question">My Question.</textarea></td>
对于Selenium,我正在使用jQuery构建一个自定义位置策略,因此我的问题是如何返回标签的" For“属性的ID?我可以在标签上使用.attr("for")来返回ID的字符串,但是我不知道如何真正返回格式正确的选择器输出。我尝试过这样的方法:
var inner = "label:contains('Question')";
$('#' + $(document).find(inner).attr('for'));
任何帮助都将不胜感激!
发布于 2011-03-06 05:33:21
是id上的冒号阻止了选择器的工作。冒号后面的文本被解释为元类,而不是id的一部分。
您必须转义选择器中的冒号:
$('#' + $(document).find(inner).attr('for').replace(':', '\\:'))
为了完整性,如果您想转义选择器中标识符中的任何特殊字符,您可以使用如下所示的替换
id.replace(/([!"#$%&'\(\)\*\+,\.\/:;<=>\?@\[\\\]\^`\{\|\}~])/g, '\\$1')
发布于 2011-03-06 05:36:37
您需要转义特殊的jQuery选择器。尝试如下所示:
function jqescape(str) {
return str.replace(/[#;&,\.\+\*~':"!\^\$\[\]\(\)=>|\/\\]/g, '\\$&');
}
var inner = "label:contains('Question')";
$('#' + jqescape( $(document).find(inner).attr('for') ) );
发布于 2011-03-06 05:40:17
这将打印“我的问题”:
alert($("textarea[id='" +
$("label:contains('Question')").attr('for') +
"']").html());
它查找的是[id='xxx']
而不是#xxx
,因为ID中有一个:
,但:
在jQuery selectors中是一个特殊字符。
https://stackoverflow.com/questions/5206890
复制相似问题