亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JQuery.closest(),parent(),parents()尋找父結點

系統 2762 0

HTML代碼,測試地址:jQuery 遍歷 - closest() 方法?

QQ截圖20120217171206

------我粘代碼上來,在頁面上會自動隱藏(會顯示一下)!誰能教我這是腫么回事!?
1.通過item-1查找 level-3(查找直接上級)?

復制代碼 代碼如下:

$('li.item-1').closest('ul')?
$('li.item-1').parent()?
$('li.item-1').parents().eq(0)?


2.通過item-1查找 level-2(通過選擇器查找父元素)?

復制代碼 代碼如下:

$('li.item-1').closest('.level-2')?
//$('li.item-1').parent('.level-2') //找不到,parent()方法只遍歷到上一層!?
$('li.item-1').parent().parent() //這個太二了有木有!?
$('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方法從當前元素開始遍歷,而parent()從父元素開始!?
$('li.item-1').closest('li') //返回 item-1,使用時要注意,如果是一個div嵌套在中一個div中,要考慮選擇器的正確使用!?
4.closet(selector,context)中context參數的用法 從當前元素開始遍歷到context元素結束,若不存在context參數遍歷到根結點?
由此可見使用context參數可以提高查詢效率!?

復制代碼 代碼如下:

var listItemII = document.getElementById('ii'); //Item-II?
//var listItemII=$(‘#ii'),這個不行,困惑好很久!?
$('li.item-1').closest('ul', listItemII).css('background-color', 'red');?
//結果必須是 item-1的父級ul元素,itemII的子元素,?
$('li.item-1').closest('#one', listItemII).css('background-color', 'green');?
//item-1的id=one的元素,且必須是itemII的子元素,未找到?


5.context參數的分析?

復制代碼 代碼如下:

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樹,匹配選擇器?
//在上述過程中如果父結點不存在,到達根結點不存在或者找到context結點(已到達指定位置)!?
if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {?
break;?
}?
}?
}?
}?
ret = ret.length > 1 ? jQuery.unique( ret ) : ret;?
return this.pushStack( ret, "closest", selectors );?
}?


對JQuery源碼不是很了解,其中的一些細節就不解釋了!?
通過closest()的定義可以得知,與context進行對比的變量cur=this[i]是一個DOM對象,而$('#ii')方法得到的是一個JQuery對象,因此傳給closest(selector,context)方法的context參數必須通過DOM方法獲得!?
jQuery對象和DOM對象的轉換??
1.獲取對象(變量名前加$目的為約定區別JQuery和DOM變量):?
獲取jQuery對象:var $variable=jQuery對象;?
獲取DOM對象:var variable=DOM對象;?
2.jQuery對象轉DOM對象:?
利用數組轉換 var cr=$("#cr")[0];?
利用get(index)方法轉換 var cr=$("#cr").get(0);?
3.DOM對象轉jQuery對象:?

復制代碼 代碼如下:

var cr=document.getElementsById("cr"); //獲取DOM對象?
var $cr=$(cr);//轉換為jQuery對象?


SO….?
$('li.item-1').closest('#one', $(‘#ii').get(0))//如此使用?
或者將源碼中 "cur===context”的判斷改為 "$(cur)===$(current)",這樣就可以兼容兩種用法!?
當然,修改源碼并不是一個好建議,但是為什么JQuery本身沒有使用這種方式呢……求指教 !!

JQuery.closest(),parent(),parents()尋找父結點


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黄色男人的天堂 | 中文字幕精品一区二区三区在线 | 亚洲精品国产成人中文 | 国产精品福利在线观看 | 2021久久伊人精品中文字幕有 | 妖精视频一区二区三区 | 亚洲国产综合在线 | 国产理论最新国产精品视频 | 国产乱在线观看视频 | 一本色道久久综合亚洲精品高清 | 在线观看人成网站深夜免费 | 欧美午夜艳片欧美精品 | 夜色成人影院在线www | 国产视频一区二区在线播放 | 日韩视频 中文字幕 | 欧美另类videos粗暴黑人 | 成年人免费毛片 | 妖精视频在线看免费视频 | 日韩视频在线一区 | julia中文字幕在线观看 | 亚洲久久综合 | 久久人人爽人人爽人人片av不 | 91免费视频国产 | 好吊色青青青国产欧美日韩 | 国产在线精品成人一区二区三区 | 欧美金8天国 | 北条麻妃手机在线观看 | 麻豆日韩区久久综合 | 欧美与黑人午夜性猛交久久久 | 五月婷婷中文字幕 | 亚洲精品久久麻豆蜜桃 | 亚洲国产成人最新精品资源 | 亚洲欧美日韩激情在线观看 | 国产成人免费在线视频 | 久久久精品国产免费观看同学 | 精品日韩一区二区三区 | sihu国产精品永久免费 | 欧美一级看片a免费视频 | 日日摸夜夜添夜夜添一区二区 | 精品视频入口 | 精品一区二区三区四区乱码90 |