2012-08-05 66 views

回答

4

僅僅因爲你有一些你想使用的元素並不意味着他們在DOM中。考慮這個人爲的例子:

var $els = $('<div class="a"></div><div class="b"></div>'); 
console.log($('.a')); 
console.log($els.find('.a')); 
console.log($els.filter('.a'));​ 

演示:http://jsfiddle.net/ambiguous/h3GMB/

第一個,$('.a'),給你什麼,因爲$els不在DOM呢。第二個也沒有給你什麼,因爲find搜索後代。只有第三人會給你,你找什麼,因爲filter減少:

匹配的元素集合到那些選擇匹配的[...]

這種操縱在爲DOM準​​備模板塊時,不在DOM中的東西相當常見。即使當DOM中的問題的元素是時,filterfind之間的差異也是相當重要的。

0

如從文件:

如果提供的jQuery代表了一組DOM元件,所述.filter()方法構造從匹配元素的子集的新jQuery對象。提供的選擇器針對每個元素進行測試;與選擇器匹配的所有元素都將包含在結果中。

考慮用一個簡單的列表的頁面就可以了:

我們可以將此方法應用於一組列表項:

$('li').filter(':even').css('background-color', 'red'); 

此調用的結果是一個紅色背景對於第1,3和5項,因爲它們與選擇器匹配(回想起:even和:odd使用基於0的索引)。

過濾器函數用於將原始查詢的結果過濾爲特定元素。

但是,如果您所指的是.hide().show(),這是您的選擇,而不是將您的代碼分割爲css和javascript,您有一些跨瀏覽器來完成這項工作的方法。

0

filter可以過濾你有集的一部分,讓我們說我們有一個項目清單,以及所有項目我想補充一類,但它的一部分我要添加另一個類:

$('#mylist li').addClass('someclass').filter('.someotherclass').addClass('filtered'); 

我可以在兩個查詢中分割它。

相關問題