JQuery.closest(),parent(),parents()尋找父結(jié)點(diǎn)
1.通過(guò)item-1查找 level-3(查找直接上級(jí))
$('li.item-1').closest('ul')
$('li.item-1').parent()
$('li.item-1').parents().eq(0)
2.通過(guò)item-1查找 level-2(通過(guò)選擇器查找父元素)
$('li.item-1').closest('.level-2')
//$('li.item-1').parent('.level-2') //找不到,parent()方法只遍歷到上一層!
$('li.item-1').parent().parent() //這個(gè)太二了有木有!
$('li.item-1').parents('.level-2')
parent(selector)中selector的用法
$('li').parent() //返回level-3,level-2和level-1的集合,它們都是li的父元素
$('li').parent('.level-3') //在上述集合中篩選出 level-3
3.closest方法從當(dāng)前元素開(kāi)始遍歷,而parent()從父元素開(kāi)始!
$('li.item-1').closest('li') //返回 item-1,使用時(shí)要注意,如果是一個(gè)div嵌套在中一個(gè)div中,要考慮選擇器的正確使用!
4.closet(selector,context)中context參數(shù)的用法 從當(dāng)前元素開(kāi)始遍歷到context元素結(jié)束,若不存在context參數(shù)遍歷到根結(jié)點(diǎn)
由此可見(jiàn)使用context參數(shù)可以提高查詢(xún)效率!
var listItemII = document.getElementById('ii'); //Item-II
//var listItemII=$(‘#ii'),這個(gè)不行,困惑好很久!
$('li.item-1').closest('ul', listItemII).css('background-color', 'red');
//結(jié)果必須是 item-1的父級(jí)ul元素,itemII的子元素,
$('li.item-1').closest('#one', listItemII).css('background-color', 'green');
//item-1的id=one的元素,且必須是itemII的子元素,未找到
5.context參數(shù)的分析
closest: function( selectors, context ) {
var ret = [], i, l, cur = this[0];
// String
var pos = POS.test( selectors ) || typeof selectors !== "string" ?
jQuery( selectors, context || this.context ) :
0;
for ( i = 0, l = this.length; i < l; i++ ) {
cur = this[i];
while ( cur ) {
if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
//找到匹配元素,則將其添加返回值集合中!跳到下一元素的查找
ret.push( cur );
break;
} else {
cur = cur.parentNode;
//向上遍歷DOM樹(shù),匹配選擇器
//在上述過(guò)程中如果父結(jié)點(diǎn)不存在,到達(dá)根結(jié)點(diǎn)不存在或者找到context結(jié)點(diǎn)(已到達(dá)指定位置)!
if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
break;
}
}
}
}
ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
return this.pushStack( ret, "closest", selectors );
}
對(duì)JQuery源碼不是很了解,其中的一些細(xì)節(jié)就不解釋了!
通過(guò)closest()的定義可以得知,與context進(jìn)行對(duì)比的變量cur=this[i]是一個(gè)DOM對(duì)象,而$('#ii')方法得到的是一個(gè)JQuery對(duì)象,因此傳給closest(selector,context)方法的context參數(shù)必須通過(guò)DOM方法獲得!
jQuery對(duì)象和DOM對(duì)象的轉(zhuǎn)換?
1.獲取對(duì)象(變量名前加$目的為約定區(qū)別JQuery和DOM變量):
獲取jQuery對(duì)象:var $variable=jQuery對(duì)象;
獲取DOM對(duì)象:var variable=DOM對(duì)象;
2.jQuery對(duì)象轉(zhuǎn)DOM對(duì)象:
利用數(shù)組轉(zhuǎn)換 var cr=$("#cr")[0];
利用get(index)方法轉(zhuǎn)換 var cr=$("#cr").get(0);
3.DOM對(duì)象轉(zhuǎn)jQuery對(duì)象:
var cr=document.getElementsById("cr"); //獲取DOM對(duì)象
var $cr=$(cr);//轉(zhuǎn)換為jQuery對(duì)象
SO….
$('li.item-1').closest('#one', $(‘#ii').get(0))//如此使用
或者將源碼中 "cur===context”的判斷改為 "$(cur)===$(current)",這樣就可以兼容兩種用法!
當(dāng)然,修改源碼并不是一個(gè)好建議,但是為什么JQuery本身沒(méi)有使用這種方式呢……求指教 ?。?!
相關(guān)文章
使用jQuery實(shí)現(xiàn)簡(jiǎn)單穿梭框方式
這篇文章主要介紹了使用jQuery實(shí)現(xiàn)簡(jiǎn)單穿梭框方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10ExtJs動(dòng)態(tài)生成treepanel的Json格式
這篇文章主要介紹了ExtJs動(dòng)態(tài)生成treepanel的Json格式的相關(guān)資料,需要的朋友可以參考下2015-07-07jQuery實(shí)現(xiàn)定時(shí)隱藏對(duì)話(huà)框的方法分析
這篇文章主要介紹了jQuery實(shí)現(xiàn)定時(shí)隱藏對(duì)話(huà)框的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了jQuery定時(shí)隱藏對(duì)話(huà)框的相關(guān)函數(shù)、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2018-02-02jquery中實(shí)現(xiàn)標(biāo)簽切換效果的代碼
現(xiàn)在比較流行jquery插件,所以既然用了jquery那么就要用好,也不用大量的寫(xiě)代碼了。2011-03-03jquery實(shí)現(xiàn)網(wǎng)頁(yè)定位導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)網(wǎng)頁(yè)定位導(dǎo)航,具有一定的實(shí)用價(jià)值和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08input file樣式修改以及圖片預(yù)覽刪除功能詳細(xì)概括(推薦)
這篇文章主要介紹了input file樣式修改以及圖片預(yù)覽刪除功能,input file 按鈕改成自己想要的樣式以及.圖片預(yù)覽功能的實(shí)現(xiàn),具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08基于jquery的關(guān)于動(dòng)態(tài)創(chuàng)建DOM元素的問(wèn)題
在我們實(shí)際的項(xiàng)目之中,相信有很多的朋友直接使用了以下的格式創(chuàng)建DOM元素。2010-12-12基于jQuery實(shí)現(xiàn)定位導(dǎo)航位置效果
這篇文章主要為大家詳細(xì)介紹了基于jQuery實(shí)現(xiàn)定位導(dǎo)航位置效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11BootStrap無(wú)限級(jí)分類(lèi)(無(wú)限極分類(lèi)封裝版)
本文給大家介紹bootstrap無(wú)限級(jí)分類(lèi)jq拓展之前的無(wú)限級(jí)分類(lèi)的封裝版的知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-08-08