jquery not(:contains)无效

时间:2015-04-29 09:56:01

标签: jquery

我使用以下代码过滤不包含特定文本的行。

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>

1 个答案:

答案 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等价物兼容)。

更新:&#34;过滤器是您的朋友&#34;

一旦开始获得复杂的查询,就可以更轻松地切换到使用filter函数返回truefalse来包含/排除项目。

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;
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/a9mck46m/5/