2012-02-08 44 views
0

我有了这个HTML片段:jQuery的查找和筛选

<body id='mydoc'> 

<table id='mytab'> 
<tr> 
    <td> 
     <table> 
      <tr> 
       <td>My String is simple</td> 
      <tr> 
     </table> 
    </td> 
    </tr> 
</table> 

</body> 

<script type="text/javascript" src="./jquery-1.7.1.js"></script> 
<script type="text/javascript" src="./jquery.parsequery.js"></script> 
<script> 

var obj = $('#mydoc').find('td').filter(function(){ 
    return ($.text(this).indexOf('My String') != -1)  
    }); 

alert(obj.length); 
for (i=0; i<obj.length; i++) 
{ 
     alert($(obj[i]).html()); 
} 
</script> 

和JavaScript警告回报2级的对象。我不知道为什么会发生这种情况。 我怎样才能得到一个包含“我的字符串是简单的”只有细胞? 谢谢。

回答

1

它是因为它在周围的桌子以及内部<td>元素<td>元素相匹配。

更改 “过滤器” 行这样的:

var obj = $('#mydoc').find('td').filter(function() 
{ 
    return $(this).find('td').length == 0 ? true : false; 
} 

...找到最里面<td> - 以确保它也含有 '我的字符串' 试试这个:

var obj = $('#mydoc').find('td').filter(function() 
{ 
    return (
     $(this).find('td').length == 0 && ($.text(this).indexOf('My String') != -1) 
    ) ? true : false 
} 
+0

此解决方案,但我不能使用它。事实上,问题更复杂。如果文档是这样的呢? – 2012-02-08 13:07:03

+0

<体ID = 'mydoc'> <表ID = 'MYTAB'> ​​ \t \t

\t \t \t \t​​ \t \t \t \t
​​ \t \t \t \t我的字符串很简单 \t \t \t \t
\t \t \t \t \t \t – 2012-02-08 13:07:47

+0

好吧,我修改了我的答案,找到最里面的TD,而不是第二。它经过每个TD在文档中,而忽略任何包含另一个TD。我加了第二个,以防你也想找到那个字符串。(编辑:刚注意到另一个答案中的另一个实现基本相同的东西 - 但我的实现不区分大小写) – 2012-02-08 14:50:40

0
$('table td').children('td').filter(function(){ 
    return ($.text(this).indexOf('My String') != -1)  
}); 
2

<td>My String is simple</td>被包裹在里面<td><table><tr><td>My String is simple</td><tr></table></td>,所以两者都被退回。

您既可以搜索精确的文本匹配:

filter(function(){ return ($(this).text() == 'My String') }) 

或搜索不包含小区的小区:

filter(function(){ return ($(this).text().indexOf('My String') != -1 && $(this).html().indexOf('<td>') == -1) }) 

还有一些其他的选择,但它全部取决于你想如何过滤选择。

+0

此解决方案不起作用我收到一个javascript错误,指出该方法不支持($ .html(this)) – 2012-02-08 13:06:28

+0

将其更改为'$(this).html()。indexOf ...'然后,应该修复它:)答案更新。 – Joe 2012-02-08 13:10:38

+0

是的,但是,如果结构更加嵌套呢?像这样:<表ID = 'MYTAB'> ​​ \t \t

\t \t \t \t​​ \t \t \t \t
​​ \t \t \t \t我的字符串是简单 \t \t \t \t
\t \t \t \t \t \t 在这种情况下,它会返回2项!我想要一个明确的方式来检索我的单元格! – 2012-02-08 13:11:58