看来,使用以下内容选择元素:contains(sub)with sub contains<或>不能得到他们的父母. 以下示例应该说明我在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>
输出为:
1 1 1 0 2 2 1
任何想法为什么第四个是0而不是1,或者我如何规避这个?
解决方法
不知道导致contains()失败,但可以使用.filter()作为替代:
alert($('body strong').filter(function() { return /<foo>/.test( $(this).text() ); }).parent().length);
这将按预期返回1.这是丑的,但工作.