选择具有特定内容的元素作为直接子节点

时间:2012-08-24 09:48:10

标签: jquery

我想选择具有特定文本作为内容的每个单元格。我这样做:

$("td:contains('Some Text')")

但在下面的标记中,该表达式找到两个td s:

<table>
  <tr>
    <td>
      <table>
        <tr>
          <td>Some Text</td>
        </tr>
      </table>
    </td>
  </tr>
</table>

我只想要实际包含文本的单元格,而不是包含其中一个单元格中包含文本的表格的单元格。

如何修改我的选择器以实现目标?

3 个答案:

答案 0 :(得分:3)

试试这个:

$("td:not(:has(*)):contains('Some Text')")

Fiddle

答案 1 :(得分:1)

$("td").filter(function() {
    return $(this.childNodes).filter(function() {
        return this.nodeType === 3 && this.nodeValue.indexOf("Some Text") > -1;
    }).length;
});

http://jsfiddle.net/bFUEJ/1/

答案 2 :(得分:0)

如果您只想通过更改选择器来完成此操作,您可以随时执行$("table table td:contains('Some Text')")

演示:http://jsfiddle.net/bFUEJ/

更好的选择是给内部表一个ID。

<table>
  <tr>
    <td>
      <table id="innerTable">
        <tr>
          <td>Some Text</td>
        </tr>
      </table>
    </td>
  </tr>
</table>


//JS
$('#innerTable').find("td:contains('Some Text')");