日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jQuery之end()和pushStack()

發布時間:2025/3/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery之end()和pushStack() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:?https://www.cnblogs.com/AndyWithPassion/archive/2012/02/06/jquery_pushStack_javascript.html

jquery.fn.end()方法, pushStack()

jQuery之end()和pushStack()

pushStack()方法在jQuery的DOM操作中被頻繁的使用, 如在parent(), find(), filter()中, 當然還有其他許多類似的方法, 它們往往需要返回一個jQuery封裝過的DOM結果集.但在我們自己寫jQuery代碼的時候,卻很少關注或使用過pushStack(). 如果我們需要寫個涉及DOM遍歷的插件,它就會顯得尤其有用.

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

html:

1 <div id="grandparent">2 I am grandparent.3 <div id="parent">4 I am parent.5 <div id="child">6 I am child.7 </div>8 </div>9 </div> 10

javascript:

1 var els = $('#child').parent().parent(); 2 console.dir(els);

圖解:

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

$.fn.grandparent = function() { ????return?this.parent().parent(); };

依舊用上面那個例子:

1 $('#child').grandparent().end();?//jQuery-[div#parent]

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

1 2 3 4 $.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.

------------------------------------------------------------------------------------------------------------

end() 方法結束當前鏈條中的最近的篩選操作,并將匹配元素集還原為之前的狀態。

語法

.end()

詳細說明

大多數 jQuery 的遍歷方法會操作一個 jQuery 對象實例,并生成一個匹配不同 DOM 元素集的新對象。當發生這種情況時,應該會把新的元素集推入維持在對象中的堆棧內。每次成功的篩選方法調用都會把新元素推入堆棧中。如果我們需要老的元素集,可以使用 end() 從堆棧中彈出新集合。

假設頁面中有一對很短的列表:

<ul class="first"><li class="foo">list item 1</li><li>list item 2</li><li class="bar">list item 3</li> </ul> <ul class="second"><li class="foo">list item 1</li><li>list item 2</li><li class="bar">list item 3</li> </ul>

例子 1

主要是在利用 jQuery 的鏈條屬性(命令鏈)時,jQuery 會比較有用。如果不使用命令鏈,我們一般是通過變量名來調用之前的對象,這樣我們就不需要操作堆棧了。不過通過 end(),我們可以把所有方法調用串聯在一起:

$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green');

親自試一試

這條命令鏈檢索第一個列表中類名為 foo 的項目,并把它們的背景設置為紅色。end() 會將對象還原為調用 find() 之前的狀態,所以第二個 find() 查找的是 <ul class="first"> 內的 '.bar' ,而不是在列表的 <li class="foo"> 中查找,并將匹配元素的背景設置為綠色。最后的結果是第一個列表中的項目 1 和項目 3 被設置了帶顏色的背景,而第二個列表中的項目沒有任何變化。

例子 2

這條長長的 jQuery 鏈可以可視化為結構化的代碼塊,篩選方法打開嵌套代碼塊,而 end() 方法用來關閉代碼塊:

$('ul.first').find('.foo').css('background-color', 'red') .end().find('.bar').css('background-color', 'green') .end();

親自試一試

最后這個 end() 不是必需的,因為我們隨后會丟棄這個 jQuery 對象。不過,如果按照這種形式編寫代碼,end() 就能提供視覺上的對稱,以及規整程序的感覺,至少對于開發者來說更易閱讀,當然代價則是由于進行了額外的調用,會有一點點性能損失。

------------------------------------------------------------------------------

轉載于:https://www.cnblogs.com/oxspirt/p/10780436.html

總結

以上是生活随笔為你收集整理的jQuery之end()和pushStack()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久日本精品字幕区二区 | www色视频 | 国产乱人伦app精品久久 | 极品少妇网站 | 长河落日 | 国产精品久久久久久久免费大片 | 女人下部全棵看视频 | 狂野少女电影在线观看国语版免费 | 91日本在线观看 | 蝌蚪久久| 精品国产乱码久久久久久久 | 黄色18网站 | 色视频在线看 | 久操视频免费看 | av中文字幕一区二区 | 最近高清中文在线字幕在线观看 | 奇米影视四色在线 | 国精无码欧精品亚洲一区蜜桃 | 95看片淫黄大片一级 | 极品探花在线观看 | 国产夫妻在线观看 | 成人免费毛片xxx | 91精品国产一区 | 精品人妻久久久久一区二区三区 | 欧美极品一区 | 男人女人拔萝卜视频 | 精品久久久久久久久久久久久久久久久久 | 国产麻豆剧果冻传媒白晶晶 | 国产精品久久久久久亚洲调教 | 国产女人视频 | 天天干天天色天天 | 岛国av免费在线 | 欧美亚一区二区三区 | 蜜臀av免费一区二区三区水牛 | 色老汉av一区二区三区 | 99精品免费视频 | 国产日本一区二区三区 | 乱短篇艳辣500篇h文最新章节 | 欧美久久一区二区三区 | 欧美草逼网 | 啪啪的网站 | 九九热在线精品 | 精品人妻一区二区免费 | 亚洲一区在线免费观看 | 国产精品九九视频 | 国产精品视频免费在线观看 | 精品无码一区二区三区在线 | 国产偷人爽久久久久久老妇app | 国产福利小视频在线 | 黄色骚视频| 97九色 | 99精彩视频| 91嫩草网 | 一区二区xxx | 中文字幕日韩亚洲 | 中文字幕有码在线 | 波多野结衣av一区二区全免费观看 | 亚洲中文字幕无码av永久 | 国产一区二 | 误杀1电影免费观看高清完整版 | 欧美三个黑人玩3p | 秋霞网一区二区三区 | 国产精品情侣呻吟对白视频 | 日韩激情小说 | 人人草人人爽 | 天堂视频在线观看免费 | 一级网站在线观看 | 欧洲亚洲成人 | 另类性姿势bbwbbw | 久久九九爱 | 亚洲色图欧美另类 | 国产精品成人3p一区二区三区 | 97小视频 | 黄色免费网站在线观看 | 久久婷婷国产麻豆91天堂 | 青草视频免费观看 | 午夜理伦三级做爰电影 | 激情第四色 | 免费播放毛片精品视频 | 1024av在线 | ktv做爰视频一区二区 | 人妻一区在线 | 99久久精品免费看国产四区 | 精品少妇一区二区三区在线观看 | 中国黄色小视频 | 夜夜操综合 | 伊人一区二区三区四区 | 日本一区二区三区久久 | 亚洲高清在线观看视频 | 久久精品亚洲精品 | 疯狂揉花蒂控制高潮h | 在线免费观看高清视频 | 91手机在线视频 | 日本久草视频 | 欧美日韩成人在线视频 | 青草久久久久 | 视频免费1区二区三区 | 尤物在线观看 | 超碰91在线|