jQuery not(:contains)不起作用

妮基·古普塔(Nikhil Gupta)

我正在使用以下代码来筛选不包含特定文本的行。

var x = "cotton";

$('#divQualCodeFuncPMType > table tbody tr:gt(0) td:eq(2) span:not(:contains(' + x + '))').closest("tr");

它不会导致任何行,但是如果我使用以下代码来过滤具有特定文本的行,那么它会很好地工作,因此not的实现似乎有问题。

$('#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>
编码消失了

问题是td:eq(2),作为只匹配第三td所有匹配的行(不只是第三个每行中)!

例如这里显示的问题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带有返回功能truefalse包含/排除项目的函数切换到会更容易

例如

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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章