用示例說(shuō)明filter()與find()的用法以及children()與find()的區(qū)別分析
jquery的find()方法與filter()方法對(duì)于初學(xué)者來(lái)說(shuō)容易混淆,在這里對(duì)這兩個(gè)方法通過一個(gè)小例子來(lái)進(jìn)行比較和說(shuō)明。旨在了解這兩種方法的區(qū)別。
html代碼
<div class="css">
<p class="rain">測(cè)試1</p>
</div>
<div class="rain">
<p>測(cè)試2</p>
</div>
先看看find()方法
$("div").find(".rain").css('color', '#FF0000');
//等價(jià)于:$("div .rain").css('color','#ff0000');
//也等價(jià)于:$(".rain","div").css('color','#ff0000');
顯示結(jié)果:
問題:這里為什么“測(cè)試2”不變?yōu)榧t色?
find() 方法定義:它是獲得當(dāng)前元素集合中每個(gè)元素的后代,通過選擇器、jQuery 對(duì)象或元素來(lái)篩選。
find()方法要注意的地方:find()方法是在當(dāng)前元素集合內(nèi)部查找。不包括自己。
上面例子中$("div")包含兩個(gè)元素。第一個(gè)元素符合要求。但第二個(gè)元素div本身的class雖然是"rain",但其內(nèi)部沒有class=rain。所以不符合。
下面使用filter()方法看看有什么新玩意
$("div").filter(".rain").css('color', '#FF0000');
顯示結(jié)果:
filter()方法定義:filter() 方法將匹配元素集合縮減為指定選擇器的元素。
意思就是對(duì)匹配元素的集合,用選擇器測(cè)試每個(gè)元素本身(不是后代),符合選擇器的元素包含在集合中,不符合的去掉(選擇器就是起過濾作用)。形成一個(gè)新的結(jié)果集。
在上面例子中:find()會(huì)在div元素內(nèi)部(后代)尋找 class為rain 的元素。而filter()則是篩選div的class為rain的元素。一個(gè)是對(duì)它的子集操作,一個(gè)是對(duì)自身集合元素篩選。
使用filter()方法的第二個(gè)形式是,通過函數(shù)而不是選擇器來(lái)篩選元素。對(duì)于每個(gè)元素,如果該函數(shù)返回 true,則元素會(huì)被包含在已篩選集合中;否則,會(huì)排除這個(gè)元素。
看一下下面的例子:
---------------------------
來(lái)自網(wǎng)頁(yè)的消息
---------------------------
The code is in your clipboard now
---------------------------
確定
---------------------------
$('li').filter(function(index) {
return $('strong', this).length == 1;
}).css('background-color', 'red');
結(jié)果如下:

這里在順便說(shuō)一下find()方法和children()方法的區(qū)別
find()方法上面已經(jīng)說(shuō)過了,在此不在熬述,下面說(shuō)一下children()方法。
children,表面意思就是:孩子,兒童,子女的意思。我一般這里理解為子女或兒子。為什么這樣理解?下面先看一下children的定義吧
children()方法定義:它是獲得匹配元素集合中每個(gè)元素的所有子元素。(不包括自己,只能在兒子輩(第一層)查找)
find() 方法定義: 它是獲得當(dāng)前元素集合中每個(gè)元素的后代,通過選擇器、jQuery 對(duì)象或元素來(lái)篩選。
我理解是children是匹配集合中每個(gè)元素的“兒子輩”的子元素。find()除了兒子輩,還包括孫子輩。即只要是它的后代就行。
下面通過一個(gè)例子來(lái)看看:
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript" type="text/JavaScript" src="http://lock.5186.me/js/jQuery1.6.2.js"></script>
<style>
body {font-size:16px; font-weight:bolder;}
p {margin:5px 0;}
</style>
</head>
<body>
<div>
<span>Hello</span>
<span>
<p class="selected">test</p>
</span>
<p>And One Last Time</p>
<p class="selected">again</p>
</div>
<p class="selected">Hello Again</p>
<script>$("div").children(".selected").css("color", "blue");</script>
</body>
</html>
結(jié)果如下圖所示:
相關(guān)文章
jquery 1.3.2 IE8中的一點(diǎn)點(diǎn)的小問題解決方法
最近的項(xiàng)目中開始使用了新版本的jquery,就是1.3.2版,發(fā)現(xiàn)在這個(gè)在版本對(duì)就radio類型的input在IE8中的支持不太好2009-07-07jQuery方法簡(jiǎn)潔實(shí)現(xiàn)隔行換色及toggleClass的使用
隔行換色的展示效果想必大家早已熟悉了吧,今天在幫大家回憶一下本例中主要用到的方法是toggleClass(),感興趣的你可不要錯(cuò)過了哈,希望可以幫助到你2013-03-03jquery 取子節(jié)點(diǎn)及當(dāng)前節(jié)點(diǎn)屬性值
本節(jié)主要介紹了jquery如何取子節(jié)點(diǎn)及當(dāng)前節(jié)點(diǎn)屬性值,需要的朋友可以參考下2014-07-07Jquery判斷radio、selelct、checkbox是否選中及獲取選中值方法總結(jié)
這篇文章主要介紹了Jquery判斷radio、selelct、checkbox是否選中及獲取選中值方法總結(jié),本文總結(jié)的比較簡(jiǎn)潔直白,看到的朋友按需索取,需要的朋友可以參考下2015-04-04Jquery知識(shí)點(diǎn)三 jquery表單對(duì)象操作
Jquery中的val(),text(),html()是對(duì)javascrip中的value、innerText、innerHtml三個(gè)屬性的封裝2011-01-01