Jquery TD包含一些文本

时间:2017-06-01 17:13:57

标签: javascript jquery html css

我试图检测表中的<td>是否包含文本,如果有,则更改背景。我想使用&#39; if then then&#39;如果可能的话,因为我想做的更多与检测文本有关。

<td class="pme-cell-WFA">Test</td>

if ($('.pme-main tr').find('td.pme-cell-WFA:not(:contains("Test"))')) {
    $('.pme-main tr').find('td.pme-cell-WFA').css('backgroundColor', 'yellow');
}
else {
    // do something else
}

问题是,该代码会更改所有<td>标记为“pme-cell-WFA”的颜色。无论它们是否包含&#39;测试&#39;或者是一个不间断的空间,或完全不同的东西。

我已尝试过几种不同的方法,但他们都要突出显示所有黄色,或者根本不突出显示任何内容。

2 个答案:

答案 0 :(得分:1)

问题是jQuery返回一个计算结果为true的对象,即使它没有找到任何结果。

检查返回结果数的length

同样正如@Matt Burland指出的那样。您需要将CSS应用于匹配的结果,而不是所有结果。您可以存储结果并重复使用它们,如下所示:

var results = $('.pme-main tr').find('td.pme-cell-WFA:not(:contains("Test"))');

if (results.length) {
    results.css('backgroundColor', 'yellow');
}
else {
    // do something else
}

答案 1 :(得分:0)

你的单行解决方案是这样的:

$('.pme-main tr').find('td.pme-cell-WFA:not(:contains("Test"))').css('backgroundColor', 'yellow');

您可以通过删除:not部分来选择其他单元格。

但是如果你想要做很多处理,那么最好选择单元格然后循环遍历它们,检查每个单元格的内容并做任何合适的处理。

例如,像这样:

&#13;
&#13;
$('.pme-main tr').find('td.pme-cell-WFA').each(function() {
  var elem = $(this);
  if (!$(this).text().includes("Test")) {
    elem.css('backgroundColor', 'yellow');
  } else {
    elem.css('backgroundColor', 'red');
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="pme-main">

  <tr>
    <td class="pme-cell-WFA">Test</td>
    <td class="pme-cell-WFA">Bar</td>
    <td class="pme-cell-WFA">Foo</td>
  </tr>
</table>
&#13;
&#13;
&#13;