【问题标题】:jQuery Find and FilterjQuery 查找和过滤
【发布时间】:2012-02-29 21:45:41
【问题描述】:

我有这个 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 个对象。我不知道为什么会这样。 如何获取仅包含“我的字符串很简单”的单元格? 谢谢。

【问题讨论】:

    标签: jquery filter find substring indexof


    【解决方案1】:

    您的&lt;td&gt;My String is simple&lt;/td&gt; 被包裹在&lt;td&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;My String is simple&lt;/td&gt;&lt;tr&gt;&lt;/table&gt;&lt;/td&gt; 中,因此两者都被退回。

    您可以搜索完全匹配的文本:

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

    或搜索不包含单元格的单元格:

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

    还有一些其他选项,但这完全取决于您要如何过滤选择。

    【讨论】:

    • 此解决方案不起作用我收到一个 javascript 错误,指出该方法不受支持 ($.html(this))
    • 然后将其更改为$(this).html().indexOf...,应该修复它:) 答案已更新。
    • 是的。但是,如果结构更嵌套怎么办?像这样:
      我的字符串很简单
      在这种情况下它会返回 2 个项目!!!我想要一种明确的方式来检索我的单元格!
    • 试一试,会的。它只会返回 (a) 包含“我的字符串”和 (b) 不包含另一个 &lt;td&gt; 的单元格
    • 你是对的,问题是它区分大小写。我必须键入 才能使其工作。谢谢。
    【解决方案2】:

    发生这种情况是因为它与周围表格中的 &lt;td&gt; 元素以及内部的 &lt;td&gt; 元素相匹配。

    将“过滤器”行改为:

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

    ...要找到最里面的&lt;td&gt; - 确保它也包含“我的字符串”,试试这个:

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

    【讨论】:

    • 此解决方案有效,但我无法使用它。事实上,问题更复杂。如果文档是这样的呢?
    • 我的字符串很简单
    • 好的,我已经修改了我的答案以找到最里面的 td 而不是第二个。它遍历文档中的每个 td,并忽略任何包含另一个 td 的内容。我添加了第二个,以防您也想找到该字符串。 (编辑:刚刚注意到另一个答案中基本相同的另一个实现 - 但我的实现不区分大小写)
    【解决方案3】:
    $('table td').children('td').filter(function(){
       return ($.text(this).indexOf('My String') != -1)       
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2017-12-12
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多