jquery过滤器选择器vs过滤器方法

时间:2012-05-02 05:28:57

标签: jquery

我遇到了使jquery过滤器方法起作用的问题。

如果我有

$("#resultDiv tr:odd").addClass("alternate_row");

包含表的div“resultDiv”中的所有行都被赋予备用行类。

但是,如果我使用

 $('#resultDiv').filter("tr:odd").addClass("alternate_row");

它似乎与任何元素都不匹配,并且没有应用任何类。

我需要使用filter方法,因为我正在做一些传递变量的其他事情。

我错过了什么?

3 个答案:

答案 0 :(得分:5)

使用第二个选择器,您选择标识为#resultDiv的元素并对其应用过滤器。但它可能不是一个集合,只是一张桌子或其他东西。

您必须选择tr元素并对其应用过滤器;

$('#resultDiv tr').filter(":odd").addClass("alternate_row");

这样您就可以使用tr集合来应用过滤器。

答案 1 :(得分:4)

在您的第一个版本中:

  

$('#resultDiv').filter("tr:odd").addClass("alternate_row")

.filter() 从一个集合中删除不匹配的元素,而您的#resultDiv元素都不是tr,因此过滤器与任何内容都不匹配。

尝试:

$('#resultDiv').find("tr:odd").addClass("alternate_row");

显式添加 匹配 tr:odd选择器的新后代节点,或

$('#resultDiv tr').filter(":odd").addClass("alternate_row");

使用单个选择器查找所有 tr元素,然后使用.filter仅选择奇数元素。

答案 2 :(得分:2)

我猜#resultDiv是所有<tr>的父母,所以我想你想要这个:

$('#resultDiv tr').filter(":odd").addClass("alternate_row");