2012-02-08 83 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