我试图检测表中的<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;或者是一个不间断的空间,或完全不同的东西。
我已尝试过几种不同的方法,但他们都要突出显示所有黄色,或者根本不突出显示任何内容。
答案 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
部分来选择其他单元格。
但是如果你想要做很多处理,那么最好选择单元格然后循环遍历它们,检查每个单元格的内容并做任何合适的处理。
例如,像这样:
$('.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;