麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 擴展 > jQuery > 正文

jQuery之end()和pushStack()使用介紹

2024-09-06 20:04:42
字體:
來源:轉載
供稿:網友
但在我們自己寫jQuery代碼的時候,卻很少關注或使用過pushStack(). 如果我們需要寫個涉及DOM遍歷的插件,它就會顯得尤其有用.

在jQuery內部,pushStack()方法通過改變一個jQuery對象的prevObject屬性來"跟蹤"鏈式調用中前一個方法返回的DOM結果集(被jQuery封裝過,也是個jQuery對象,說是"跟蹤",是因為實際存儲的是個引用). 當我們再鏈式調用end()方法后, 內部就返回當前jQuery對象的prevObject. 具體更多細節, 直接看源碼即可. 這里只做個簡單的分析, 直接來個例子:

html:
復制代碼 代碼如下:
<div >
I am grandparent.
<div >
I am parent.
<div >
I am child.
</div>
</div>
</div>

javascript:
復制代碼 代碼如下:
var els = $('#child').parent().parent();
console.dir(els);

圖解:

了解這個之后, 我們來做一個grandparent插件,用來替代.parent().parent()這樣連續2次的調用,直接用.grandparent().如果"一不小心"沒考慮end()的話,代碼很可能就是這個樣子的:

復制代碼 代碼如下:
$.fn.grandparent = function() {
return this.parent().parent();
};

依舊用上面那個例子:

復制代碼 代碼如下:$('#child').grandparent().end(); //jQuery-[div#parent]

很顯然, 大多數情況下這不是我們想要的, 事實上我們想通過鏈式調用end()直接返回到jquery[div#child]. 現在該是pushStack出馬的時候了,我們只要加上一行即可:

復制代碼 代碼如下:
$.fn.grandparent = function() {
var els = this.parent().parent();
return this.pushStack(els.get());
};

在pushStack內部, 把els.get()返回的DOM數組封裝成一個新的jQuery對象, 而this(jQuery[div#child])會賦值給之前新構建jQuery的prevObject, 最后返回新生的那個jQuery對象.

所以這次, 當我們再用end()就對了:
復制代碼 代碼如下:
var grandparent = $('#child').grandparent()./* jquery-[div#grandparent]*/.end() /*jquery-[div#child]*/

此博文內容的主體思想來自Learning JQuery中的一篇博客, 感謝該作者的分享. 感興趣的話, 點擊jQuery pushStack.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品亚洲二区 | 亚洲网在线观看 | 日韩 综合 | 九色新网址 | 国产高潮好爽受不了了夜色 | 中文字幕视频在线播放 | 欧美精品一区二区三区久久久 | 91看片淫黄大片欧美看国产片 | 羞羞漫画无遮挡观看 | 成人毛片视频在线观看 | 国产中出在线观看 | 日本中文字幕网址 | 成码无人av片在线观看网站 | 日韩精品中文字幕在线观看 | 一级黄色欧美 | 国产日韩在线观看视频 | 最新亚洲国产 | 视频一区二区不卡 | 成年性羞羞视频免费观看 | 免费久久精品 | 日本精品视频一区二区三区四区 | 国产精品久久久久久久久久大牛 | 久久99精品久久久久久236 | xnxx 日本19 | 伊久在线 | 综合图区亚洲 | 国产精品免费视频观看 | 日本在线一区二区 | 亚洲网站免费观看 | 精品免费在线视频 | 亚洲小视频在线观看,com | 精品一区二区久久久久久按摩 | 中国av免费在线观看 | www久久久久久 | 国产免费专区 | 日本在线免费观看视频 | 亚洲3atv精品一区二区三区 | 国产91丝袜在线播放0 | 深夜视频在线观看 | 九草在线 | 黄色一级视频 |