jQuery查找和过滤

时间:2012-02-08 12:49:57

标签: jquery filter find substring indexof

我有这个HTML片段:

<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个对象。我不知道为什么会这样。 如何才能获得包含“My String is simple”的单元格? 谢谢。

3 个答案:

答案 0 :(得分: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) })

还有一些其他选项,但这一切都取决于您希望如何过滤选择。

答案 1 :(得分:1)

这是因为它匹配围绕它的表中的<td>元素以及内部<td>元素。

将“过滤器”行更改为:

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

...找到最里面的<td> - 确保它还包含'My String'试试这个:

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

答案 2 :(得分:0)

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