访问标签的“for”属性的id

时间:2011-03-05 21:26:04

标签: jquery

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

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

这是id上的冒号,使选择器无法工作。冒号后面的文本被解释为元类,而不是id的一部分。

你必须在选择器中转义冒号:

$('#' + $(document).find(inner).attr('for').replace(':', '\\:'))

为了完整;如果你想要转义选择器中的标识符中的任何特殊字符,你将使用像这样的替换

id.replace(/([!"#$%&'\(\)\*\+,\.\/:;<=>\?@\[\\\]\^`\{\|\}~])/g, '\\$1')

答案 1 :(得分:0)

您需要转义特殊的jQuery选择器。 尝试这样的事情:

function jqescape(str) { 
    return str.replace(/[#;&,\.\+\*~':"!\^\$\[\]\(\)=>|\/\\]/g, '\\$&'); 
}
var inner = "label:contains('Question')";
$('#' + jqescape( $(document).find(inner).attr('for') ) );

答案 2 :(得分:0)

这将打印“我的问题”:

alert($("textarea[id='" + 
    $("label:contains('Question')").attr('for') + 
    "']").html());

它正在寻找[id='xxx']而不是#xxx,因为ID中有:。但是:jQuery selectors中的一个特殊字符。