我使用以下代码过滤不包含特定文本的行。
var x = "cotton";
$('#divQualCodeFuncPMType > table tbody tr:gt(0) td:eq(2) span:not(:contains(' + x + '))').closest("tr");
它导致没有行,但如果我使用以下代码来过滤具有特定文本的行,那么它工作正常,所以我的实现似乎没有错误。
$('#divQualCodeFuncPMType > table tbody tr:gt(0) td:eq(2) span:contains(' + x + ')').closest("tr");
有人可以在这里纠正错误。任何帮助将不胜感激。
更新:HTML标记
<table class="SetDWPParameterTabStyle">
<tbody>
<tr class="GridHeaderSystemParamter">
<td style="display: none">
Map Id
</td>
<td style="display: none; width: 30px;">
Type Id
</td>
<td style="width: 300px">
Material Type
</td>
</tr>
<tr>
<td style="display: none">
<span id="lblMapId">10</span>
</td>
<td style="display: none">
<span id="Label3">60</span>
</td>
<td>
<span id="Label1">100% cotton</span>
</td>
</tr>
<tr>
<td style="display: none">
<span id="lblMapId">20</span>
</td>
<td style="display: none">
<span id="Label3">70</span>
</td>
<td>
<span id="Label1">100% cotton</span>
</td>
</tr>
</tbody>
<table>
答案 0 :(得分:1)
问题是td:eq(2)
,因为它只匹配所有匹配行的第三个td
(而不仅仅是每行中的第三行)!
e.g。此处显示的问题http://jsfiddle.net/TrueBlueAussie/a9mck46m/2/
改为使用nth-child(3)
:
$('#divQualCodeFuncPMType > table tbody tr:gt(0) td:nth-child(3) span:contains("' + x + '")').closest("tr");
JSFiddle: http://jsfiddle.net/TrueBlueAussie/a9mck46m/1/
td:nth-child(3)
将匹配第三个孩子的每个td
。注意nth-child
从1开始(与CSS等价物兼容)。
一旦开始获得复杂的查询,就可以更轻松地切换到使用filter
函数返回true
或false
来包含/排除项目。
e.g。
var $el = $('#divQualCodeFuncPMType > table tbody tr:gt(0)').filter(function(){
return $('td:nth-child(3) span:contains("' + x + '")', this);
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/a9mck46m/4/
下面的其他问题询问了搜索的组合:
如果找到两个项目,以下只返回true
值:
var x = "cotton";
var y = "Fish";
var $el = $('#divQualCodeFuncPMType > table tbody tr:gt(0)').filter(function(){
return $(this).find('td:nth-child(3) span:contains("' + x + '")').length && $(this).find('td:nth-child(5) span:contains("' + y + '")').length;
});