使用jQuery卸載全部事件的思路詳解
說到事件, jquery 做了不少,當(dāng)然也有 data 的很多功勞,因?yàn)樵?js 不支持匿名卸載事件的,而她為了開發(fā)者好用支持了匿名的
匿名事件的思路
首先她會判斷目標(biāo)是否是元素或者對象,如果是元素,則在元素上打一個(gè)標(biāo)識( expando )然后值是生成的一個(gè) guid ,并在緩存對象下建立一個(gè)緩存,比如:
$.cache={ '2': { data: {}, events: {}, handle: function(){} }, }
然后會在你觸發(fā)元素事件時(shí)拿元素上的標(biāo)識去往緩存里的 events 里找,并會有是否委托,選擇器等判斷,然后最終觸發(fā),卸載的時(shí)候其實(shí)是拿緩存里的 handle 卸載的,因?yàn)槭且粋€(gè)...
如果目標(biāo)不是元素,比如是一個(gè) window 那么她會直接往目標(biāo)上添加標(biāo)識,比如: window[$.expando]
其實(shí)事件跟緩存有很深的關(guān)系,她們是蕾絲~
卸載全部事件
清空標(biāo)識
這里的標(biāo)識包括元素上的和對象上的
$('*').add(window).each(function(){ try{ delete this[$.expando]; }catch(e){} });
ps:因?yàn)?window 不是元素,但會有一些事件,比如 scroll , resize 等
刪除緩存
這里的緩存包括元素的緩存和對象緩存
window[$.expando] = {} $.cache = {};
以上所述上小編給大家介紹的使用jQuery卸載全部事件的思路詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時(shí)回復(fù)大家的!
相關(guān)文章
jQuery實(shí)現(xiàn)連續(xù)動畫效果實(shí)例分析
這篇文章主要介紹了jQuery實(shí)現(xiàn)連續(xù)動畫效果,實(shí)例分析了animate方法實(shí)現(xiàn)動畫效果的相關(guān)技巧,并備有較為詳盡的注釋供讀者學(xué)習(xí)參考,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10JS+CSS實(shí)現(xiàn)圖片預(yù)加載與背景圖上中下切圖
這篇文章介紹了JS+CSS實(shí)現(xiàn)圖片預(yù)加載與背景圖上中下切圖的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Jquery操作Select 簡單方便 一個(gè)js插件搞定
Jquery其實(shí)本身可以操作select表單,但是由于比較反鎖,沒有.net 控件那樣去操作方便,我在網(wǎng)上Google了一會,發(fā)現(xiàn)了一個(gè)不錯(cuò)的專門操作select的插件,很好,使用過了,感覺蠻不錯(cuò)的。2009-11-11讓人印象深刻的10個(gè)jQuery手風(fēng)琴效果應(yīng)用
jQuery 是最流行的 JavaScript 開發(fā)框架,它簡化了 HTML 文檔遍歷,事件處理,動畫以及 Ajax 交互,幫助 Web 開發(fā)人員更快速的實(shí)現(xiàn)各種精美的界面效果2012-05-05