1

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

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

但在以下标记中,该表达式找到两个tds:

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

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

如何修改我的选择器以到达那里?

4

3 回答 3

3

试试这个:

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

小提琴

于 2012-08-24T09:51:27.713 回答
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/

于 2012-08-24T09:53:48.850 回答
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')");
于 2012-08-24T09:51:39.217 回答