欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jQuery中的pushStack實現(xiàn)原理和應用實例

 更新時間:2015年02月03日 09:13:42   作者:Hito''s Blog  
這篇文章主要介紹了jQuery中的pushStack實現(xiàn)原理和應用實例,pushStack是jQuery內(nèi)核中一個非常重要的函數(shù),許多jQuery內(nèi)部函數(shù)中都頻繁用到它,掌握這個函數(shù),有利于理解jQuery的運行原理,需要的朋友可以參考下

pushStack是jQuery內(nèi)核中一個非常重要的函數(shù),它是如此重要,以至于許多jQuery內(nèi)部函數(shù)中都頻繁用到它。平常情況下,雖然很少用到它, 但是掌握這個函數(shù),不僅有利于理解jQuery的運行原理,還方便我們做更加高級的jQuery操作。

顧名思義,pushStack是入棧, 棧作為一種數(shù)據(jù)結(jié)構(gòu),是一種只能在一端進行插入和刪除操作的特殊線性表。數(shù)據(jù)入棧時,類似與我們進電梯,后進而先出, 如下圖:

jQuery中的棧其實并不是真正的棧,而是給jQuery對象附加一個屬性,指向當前對象的上一個對象, 通過end方法就能返回上一個元素。如下:

<span>1</span>
<span>2</span>
<span>3</span>
<script>
$('span').eq(0).css('fontSize','20px').end().fadeOut(2000);
</script>

上面的代碼會使第一個span的字體大小為20px,并讓所有span在2秒鐘之內(nèi)fadaout。

pushStack屬于jQuery的實例方法,通過jQuery對象調(diào)用,如通過$().pushStack(document.getElementsByTagName(‘div')).css(‘background','blue')把所有div的背景都設置為藍色。那么pushStack的原理是什么,為什么傳入的DOM對象可以用css方法操作呢?先來看一下jQuery中pushStack的源碼:

pushStack: function( elems ) {
 // Build a new jQuery matched element set
 var ret = jQuery.merge( this.constructor(), elems );
 // Add the old object onto the stack (as a reference)
 ret.prevObject = this;
 ret.context = this.context;
 // Return the newly-formed element set
 return ret;
}
//jQuery.merge
merge: function( first, second ) {
 var l = second.length,
 i = first.length,
 j = 0;
 if ( typeof l === "number" ) {
 for ( ; j < l; j++ ) {
  first[ i++ ] = second[ j ];
 }
 } else {
 while ( second[j] !== undefined ) {
  first[ i++ ] = second[ j++ ];
 }
 }
 first.length = i;
 return first;
}

pushStack的實現(xiàn)比較簡單,主要涉及到jQuery的靜態(tài)方法merge, 這個方法用來合并對象, 設計思路是在第一個對象的基礎上,把第二個對象的屬性(0至n)附加上去, 理解這一點很重要。再回到pushStack這個函數(shù),首先定義一個局部變量ret存儲合并對象,然后給這個對象存儲prevObject和context屬性,最后返回合并之后的ret對象。這里有幾點需要注意:
1, this.constructor 就是jQuery的構(gòu)造函數(shù)init,所以this.constructor()返回一個jQuery對象.
2, 由于jQuery merge函數(shù)返回的對象是第二個函數(shù)附加到第一個上面,所以ret也是一個jQuery對象,這里可以解釋為什么pushStack出入的DOM對象也可以用CSS方法進行操作。
3, 返回的對象的prevObject屬性指向上一個對象,所以可以通過這個屬性找到棧的上一個對象.

相關(guān)文章

  • jquery星級插件、支持頁面中多次使用

    jquery星級插件、支持頁面中多次使用

    一個關(guān)于jquery星級插件的博文,那是我從網(wǎng)上收集的,它只支持一個頁面中使用一次,多次使用的話會發(fā)生沖突,達不到我項目的需求,沒辦法,只能修改它
    2012-03-03
  • 基于編寫jQuery的無縫滾動插件

    基于編寫jQuery的無縫滾動插件

    這篇文章主要介紹了基于編寫jQuery的無縫滾動插件實現(xiàn)代碼,需要的朋友可以參考下
    2014-08-08
  • jQuery中$.grep() 過濾函數(shù) 數(shù)組過濾

    jQuery中$.grep() 過濾函數(shù) 數(shù)組過濾

    這篇文章主要介紹了jQuery中$.grep() 過濾函數(shù) 數(shù)組過濾的相關(guān)資料,需非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • jQuery cdn使用介紹

    jQuery cdn使用介紹

    如果您不希望下載并存放jQuery,那么也可以通過 CDN(內(nèi)容分發(fā)網(wǎng)絡)引用它,下面是具體實現(xiàn),有類似需求的各位可以參考下哈,希望對你有所幫助
    2013-05-05
  • easyui簡介_動力節(jié)點Java學院整理

    easyui簡介_動力節(jié)點Java學院整理

    這篇文章主要介紹了easyui簡介,詳細的介紹了什么是easyui和easyui的用法,有興趣的可以了解一下
    2017-07-07
  • jquery實現(xiàn)異步文件上傳ajaxfileupload.js

    jquery實現(xiàn)異步文件上傳ajaxfileupload.js

    這篇文章主要為大家詳細介紹了jquery實現(xiàn)異步文件上傳ajaxfileupload.js,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 在IE瀏覽器中resize事件執(zhí)行多次的解決方法

    在IE瀏覽器中resize事件執(zhí)行多次的解決方法

    resize事件是在窗口或框架的大小被調(diào)整時發(fā)生,包括最小化、最大化。在IE和Opera瀏覽器中,只要窗口邊框被拖動,就觸發(fā)該事件,在Mozilla瀏覽器中,resize 事件只是在停止改變窗口大小時才會觸發(fā)。
    2011-07-07
  • jQuery實現(xiàn)垂直半透明手風琴特效代碼分享

    jQuery實現(xiàn)垂直半透明手風琴特效代碼分享

    這是一款jquery hover抽屜式導航圖片展開收縮切換特效代碼,用戶還可以自定義對應幻燈片的標題與文字說明,是一款非常實用的幻燈片特效源碼。
    2015-08-08
  • jQuery使用siblings獲取某元素所有同輩(兄弟姐妹)元素用法示例

    jQuery使用siblings獲取某元素所有同輩(兄弟姐妹)元素用法示例

    這篇文章主要介紹了jQuery使用siblings獲取某元素所有同輩(兄弟姐妹)元素用法,結(jié)合簡單實例形式分析了siblings()函數(shù)獲取同輩元素的操作技巧,需要的朋友可以參考下
    2017-01-01
  • jQuery使用animate創(chuàng)建動畫用法實例

    jQuery使用animate創(chuàng)建動畫用法實例

    這篇文章主要介紹了jQuery使用animate創(chuàng)建動畫用法,可實現(xiàn)點擊鏈接文字隱藏及顯示文字的功能,實例分析了jquery中toggle與animate方法的使用技巧,需要的朋友可以參考下
    2015-08-08

最新評論