0

我对一个找不到问题的简单问题感到沮丧:

我想通过查找由于不同标准而被标记为“已过滤”的任何单元格来过滤表中的行。所以最后一种行过滤类型“选择”过滤的单元格来决定是否要过滤包含的行。

这是一个简单的例子:

html:

<table>   <tbody>
    <tr class="">
        <td class=""><span>1-1</span></td>
        <td class=""><span>1-2</span></td>
        <td class=""><span>1-3</span></td>      
    </tr>
    <tr class="">
        <td class=""><span>2-1</span></td>
        <td class="filtered"><span>2-2</span></td>
        <td class="filtered"><span>2-3</span></td>      
    </tr>
    <tr class="">
        <td class=""><span>3-1</span></td>
        <td class="filtered"><span>3-2</span></td>
        <td class=""><span>3-3</span></td>      
    </tr>   </tbody> </table>

​CSS:

table { margin: 20px; }
td { padding:4px; }
td span { background-color: silver; }
tr.filtered { display:none; }​

js/jquery:

$('table tbody tr').filter('td.filtered').addClass('filtered');

我为此准备了一个提琴手:http: //jsfiddle.net/dtsZX/3/

我希望第 2 行和第 3 行添加“过滤”类,从而被隐藏。然而,这是行不通的。jquery 命令有什么问题?

4

3 回答 3

5

你想要:has

$('table tbody tr:has(td.filtered)').addClass('filtered');

trs自己永远比不上td!相反,您想要过滤以 a作为其后代tr的 s 。td

于 2012-07-07T22:05:29.547 回答
1

如果要在 tr 中添加“过滤”:

$('table tbody tr').find("td.filtered").parent().addClass("filtered")

代替:

$('table tbody tr').filter('td.filtered').addClass('filtered');

http://jsfiddle.net/dtsZX/7/

于 2012-07-07T22:03:47.717 回答
1

过滤方法不能以这种方式工作。请参阅JQuery 文档

过滤器实际上返回在前一个选择器中选择的项目,这些项目与方法中的选择器匹配filter

尝试使用这个:$('table tbody tr td.filtered').parent().addClass('filtered');

:has另一个回答者提到的选择器(如果使用 jQuery 1.1.4 或更高版本)。

于 2012-07-07T22:05:38.070 回答