我想在检查多列中可接受的值后隐藏表行。

该表将是:

<table id="my-table>
<tr><td class="name">John</td><td class="lastname">Doe</td></tr>
<tr><td class="name">Ann</td><td class="lastname">Doe</td></tr>
<tr><td class="name">John</td><td class="lastname">Smith</td></tr>
</table>


根据我到目前为止的研究(以及post),要隐藏除John Doe之外的所有人,都需要以下Jquery短语:

$("#my-table td.name:not(:contains('John')):td.lastname:not(:contains('Doe'))").parent().hide();


但是Jquery不喜欢这样,并说Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: td

什么是正确的方法?

同样,我想了解如何进行更复杂的查询,例如:
Hide all rows with 'first name' containing 'a' OR 'b' AND 'last name' containing 'x' OR 'y'

最佳答案

迭代每个tr,然后检查每个firstlast td

$( "tr" ).each( function( index, val ){
    if($(this).find("td:first-child").text() == 'John' && $(this).find("td:last-child").text() == 'Doe') {
        $(this).hide();
    }
});


Fiddle

更新:隐藏除John Doe之外的所有人

$( "tr" ).each( function( index, val ){
    if($(this).find("td:first-child").text() != 'John'  || $(this).find("td:last-child").text() != 'Doe') {
        $(this).hide();
    }
});


Fiddle

10-07 19:35
查看更多