-
jQuery一共13個(gè)模塊,從2.1版開始jQuery支持通過(guò)AMD模塊劃分,jQuery在最開始發(fā)布的1.0版本是很簡(jiǎn)單的,只有CSS選擇符、事件處理和AJAX交互3大塊。其發(fā)展過(guò)程中,有幾次重要的變革。 五大塊: jQuery按我的理解分為五大塊,選擇器、DOM操作、事件、AJAX與動(dòng)畫,那么為什么有13個(gè)模塊?因?yàn)閖Query的設(shè)計(jì)中最喜歡的做的一件事,就是抽出共同的特性使之“模塊化”,當(dāng)然也是更貼近S.O.L.I.D五大原則的“單一職責(zé)SRP”了,遵守單一職責(zé)的好處是可以讓我們很容易地來(lái)維護(hù)這個(gè)對(duì)象查看全部
-
The Write Less,Do More(寫更少,做更多),無(wú)疑就是jQuery的核心理念,簡(jiǎn)潔的API、優(yōu)雅的鏈?zhǔn)?、?qiáng)大的查詢與便捷的操作。從而把jQuery打造成前端世界的一把利劍,所向披靡!查看全部
-
pushStack 需要回顧查看全部
-
pushStack查看全部
-
end方法就是回溯到上一個(gè)Dom合集,因此對(duì)于鏈?zhǔn)讲僮髋c優(yōu)化,這個(gè)方法還是很有意義的查看全部
-
首先對(duì) JS 和 jQuery 都能夠熟練使用并完成至少兩個(gè)中型項(xiàng)目,對(duì) JS 和 jQuery 都形成自己的一套理解和感悟,對(duì)各版本瀏覽器的差異和兼容性十分熟悉,這時(shí)候再去看源碼解析,會(huì)感覺恍然大悟,更能深刻理解運(yùn)行原理和封裝的妙處查看全部
-
jQuery多庫(kù)共存處理,也叫無(wú)沖突處理。解決方案:noConflict函數(shù),將變量$的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫(kù),例: jQuery.noConflict(); //使用jQuery jQuery("aaron").show(); //使用其他庫(kù)的$() $("arron").style.display = "block"; 注意:noConflict函數(shù)必須在導(dǎo)入jQuery之后,并在導(dǎo)入另一個(gè)導(dǎo)致沖突的庫(kù)之前使用。 Var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict = function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }; 首先,我們先判斷下當(dāng)前的的$空間是不是被jQuery接管了,如果是則讓出控制權(quán)給之前的_$引用的庫(kù),如果傳入deep為true的話等于是把jQuery的控制權(quán)也讓出去了。查看全部
-
jQuery的3種針對(duì)文檔加載的方法: $(document).ready(function(){ //... }) $(function(){ //... }) $(document).load(function(){ //... }) ready和load誰(shuí)先執(zhí)行:ready先執(zhí)行,load后執(zhí)行 DOM文檔加載步驟: (1)解析HTML結(jié)構(gòu) (2)加載外部腳本和樣式文件 (3)解析并執(zhí)行腳本代碼 (4)構(gòu)造HTML DOM模型//ready (5)加載圖片等外部文件 (6)頁(yè)面加載完畢//load jQuery兼容的具體策略:針對(duì)高級(jí)的瀏覽器 針對(duì)IE的加載檢測(cè):使用doScroll方法調(diào)用。原理:IE在非iframe中時(shí),只有不斷的通過(guò)執(zhí)行doScroll判斷DOM是否加載完畢。如果頁(yè)面Dom未加載完成時(shí),調(diào)用doScroll會(huì)導(dǎo)致異常,所以使用try-catch來(lái)捕獲異常。反之,頁(yè)面加載完成,則調(diào)用doScroll不會(huì)出現(xiàn)異常。查看全部
-
jQuery的類數(shù)組對(duì)象結(jié)構(gòu)(jQuery內(nèi)部的存儲(chǔ)結(jié)構(gòu)): 9種方法的重載:選擇器,dom的處理,dom的加載 1. jQuery([selector,[context]]) 2. jQuery(element) 3. jQuery(elementArray) 4. jQuery(object) 5. jQuery(jQuery object) 6. jQuery(html,[ownerDocument]) 7. jQuery(html,[attributes]) 8. jQuery() 9. jQuery(callback) 函數(shù)內(nèi)部保證通過(guò)new操作符構(gòu)建的方法,例: var a = function(s){ //強(qiáng)制轉(zhuǎn)換為對(duì)象 if(!(this instanceof a)){//this第一次指代window,第二次指代new a(s)的實(shí)例 return new a(s); } //邏輯處理段 this.length = 1; return this;//this指向new出來(lái)的實(shí)例對(duì)象 }查看全部
-
庫(kù)和框架設(shè)計(jì)要點(diǎn):解決命名空間和變量污染的問(wèn)題 jQuery的解決辦法:利用js函數(shù)作用域的特性,采用立即調(diào)用表達(dá)式包裹自身的方法解決 jQuery使用()將匿名函數(shù)括起來(lái),再加一對(duì)小括號(hào)自調(diào)用 (function(window,undefined){ var jQuery = function(){} //... window.jQuery = window.$ = jQuery; })(window); 1.window和undefinded都是為了減少變量查找所經(jīng)過(guò)的scope作用域,即查找局部變量比查找全局變量更快; 2.undefined并不是js數(shù)據(jù)類型的undefined,而是普通的變量名 全局變量是魔鬼,匿名函數(shù)可以有效的保證在頁(yè)面上寫入js,而不會(huì)造成全局變量的污染,通過(guò)小括號(hào),讓其加載的時(shí)候立即初始化,就形成一個(gè)單例模式的效果,從而只會(huì)執(zhí)行一次查看全部
-
1、window和undefined都是為了減少變量查找所經(jīng)過(guò)的scope作用域。當(dāng)window通過(guò)傳遞給閉包內(nèi)部之后,在閉包內(nèi)部使用它的時(shí)候,可以把它當(dāng)做一個(gè)局部變量,顯然比原先在window scope下查找的時(shí)候更快一些。 2、undefined也是同樣的道理,其實(shí)這個(gè)undefined并不是JavaScript數(shù)據(jù)類型的undefined,而是一個(gè)普普通通的變量名。只是因?yàn)闆]給它傳遞值,它的值就是undefined,undefined并不是JavaScript的保留字查看全部
-
任何庫(kù)和框架設(shè)計(jì)的第一個(gè)要點(diǎn)就是解決命名空間與變量污染的問(wèn)題。jQuery就是利用了JavaScript函數(shù)作用域的特性,采用立即調(diào)用表達(dá)式包裹資深的方法來(lái)解決這個(gè)問(wèn)題。查看全部
-
jQuery一共13個(gè)模塊,從2.1版開始jQuery支持通過(guò)AMD模塊劃分,jQuery在最開始發(fā)布的1.0版本是很簡(jiǎn)單的,只有css選擇符、事件處理和AJAX交互3大模塊。 jQuery按我的理解分為五大塊,選擇器,DOM操作、事件、AJAX與動(dòng)畫。 .ajaxComplete() .ajaxError() .ajaxSend() .ajaxStart() .ajaxStop() .ajaxSuccess() 底層接口: jQuery.ajax() jQuery.ajaxSetup() 快捷方法: jQuery.get() jQuery.getJSON() jQuery.getScirpt() jQuery.post()查看全部
-
當(dāng)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象,并且它不知道具體有多少對(duì)象需要改變的時(shí)候,就應(yīng)該考慮使用觀察者模式。查看全部
-
function Aaron(List, callback) { setTimeout(function() { var task; if (task = List.shift()) { task(); //執(zhí)行函數(shù) } if (List.length > 0) { //遞歸分解 arguments.callee(List) } else { callback() } }, 25) } function show(data){ $("body").append('<li>'+ data +'</li>') } Aaron([ function() { show('a') }, function() { show('b') }, function() { show('c') } ], function() { show('callback') }) var callbacks = $.Callbacks(); callbacks.add(function() { show('callbacksA'); }) callbacks.add(function() { show('callbacksB'); }) callbacks.fire();查看全部
舉報(bào)
0/150
提交
取消