2012-05-02 210 views
0

我遇到了使jQuery篩選器方法工作的問題。jquery篩選器選擇器vs篩選器方法

如果我有

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

包含表中給出的交替行類格「resultDiv」中的行的全部。

但是如果我使用

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

它似乎並不匹配任何元素並沒有什麼應用了類。

我需要使用過濾器方法,因爲我正在做其他一些傳遞變量的事情。

我錯過了什麼?

+0

就像一個想法一樣,如果您想要爲樣式目的添加類(如斑馬條紋)並且您不必支持舊版瀏覽器,則還可以查看CSS3的第n個子選擇器。 –

+0

不幸的是,我們必須支持舊瀏覽器,這就是爲什麼我選擇這種方式 –

回答

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只挑選奇數。

+0

爲什麼第一個選擇器工作? –

+3

@DanielPowell在你的問題?因爲第一個選擇器明確地找到了後代的'tr'節點。 '。filter()'不會查找新節點,它只會減少當前匹配的集合。 – Alnitak

2

我猜測#resultDiv是所有<tr>的母公司,所以我想你想的:

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

隨着你用id #resultDiv選擇元素的第二選擇和應用過濾器它。但它可能不是一個集合,只是一張桌子或其他東西。

你必須選擇tr元素,並像這樣應用濾鏡;

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

這樣,您將有一個tr集合來應用過濾器。