jquery的find()方法與filter()方法對於初學者來說容易混淆,在這裡對這兩個方法透過一個小例子來進行比較和說明。旨在了解這兩種方法的差異。
html程式碼
測試1
$("div").find(".rain").css('color', '#FF0000');//等價於:$("div .rain").css('color','#ff0000');//也等價於:$(".rain","div"). css('color','#ff0000');
顯示結果:
find() 方法定義:它是獲得目前元素集合中每個元素的後代,透過選擇器、jQuery 物件或元素來篩選。
$("div").filter(".rain").css('color', '#FF0000');
find()方法要注意的地方:find()方法是在目前元素集合內部尋找。不包括自己。
上面範例中$("div")包含兩個元素。第一個元素符合要求。但第二個元素div本身的class雖然是"rain",但內部沒有class=rain。所以不符合。
下面用filter()方法看有什麼新玩意
顯示結果:
filter()方法定義:filter() 方法將匹配元素集合縮減為指定選擇器的元素。
意思是對匹配元素的集合,用選擇器測試每個元素本身(不是後代),符合選擇器的元素包含在集合中,不符合的去掉(選擇器就是起過濾作用)。形成一個新的結果集。 在上面範例中:find()會在div元素內部(後代)尋找 class為rain 的元素。而filter()則是篩選div的class為rain的元素。
一個是對它的子集操作,一個是對自身集合元素篩選。看兩個filter()方法的例子:例一
例二這裡在順便說一下find()方法和children()方法的差別
find()方法上面已經說過了,在此不在熬述,下面說一下children()方法。
children,表面意思就是:孩子,兒童,子女的意思。我一般這裡理解為子女或兒子。為什麼這樣理解?下面先看一下children的定義吧
children()方法定義:它是獲得匹配元素集合中每個元素的所有子元素。 (不包括自己,只能在兒子輩(第一層)找到)
find() 方法定義: 它是取得目前元素集合中每個元素的後代,透過選擇器、jQuery 物件或元素來篩選。
我理解是children是匹配集合中每個元素的「兒子輩」的子元素。 find()除了兒子輩,還包括孫子輩。即只要是它的後代就好。
下面透過一個例子來看:
And One Last Time
again
Hello Again