Dan*_*eck 10 jquery jquery-selectors
看来使用选择的元素:contains(sub)与sub含<或>不能得到他们的父母.
以下示例应说明我在Safari和Camino(Mac上的Gecko)中遇到的问题:
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
</head>
<body>
<p><strong>bar</strong></p>
<p><strong><foo></strong></p>
<script type="text/javascript">
alert($('body strong:contains("bar")').length);
alert($('body strong:contains("bar")').parent().length);
alert($('body strong:contains("<foo>")').length);
alert($('body strong:contains("<foo>")').parent().length); // this fails
alert($('body strong').length);
alert($('body strong').parent().length); // two p elements
alert($('body strong').parent().parent().length); // one body
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出是:
1
1
1
0
2
2
1
Run Code Online (Sandbox Code Playgroud)
任何想法为什么第四个0而不是1,或我如何绕过这个?
这个页面提到了在选择器中转义名称,但这也不起作用(另外,我不确定它是否适用).
不知道是什么原因导致contains()失败,但您可以使用.filter()以下替代方案:
alert($('body strong').filter(function() {
return /<foo>/.test( $(this).text() );
}).parent().length);
Run Code Online (Sandbox Code Playgroud)
正如预期的那样返回 1。它很丑,但是有效。