今天找到個檢測img src加載完畢的代碼,寫法是 .load(function(){}),測試了一天都不執行,看了控制檯,說是load定義錯誤,詭異了,在W3School網上測試的例子是正確的呢,後來懷疑是不是jq版本的問題,於是換了jq從1.7.2到3.2.1的所有版本測試,結果終於發現,自3.0版本後,就會報錯,代碼無法執行,果然是版本問題。
遂查了一下,發現自3.0以後將load防範規範化了,使用on('load',function ...... ) 代替了之前的load看參數下菜單的寫法。
此記!!!
摘錄的其他相關說明:
//-----百度知道:
on的用法:
.on( events [, selector ] [, data ], handler(eventObject) )
描述: 在選定的元素上綁定一個或多個事件處理函數。
events
類型: String
一個或多個空格分隔的事件類型和可選的命名空間,或僅僅是命名空間,比如"click", "keydown.myPlugin", 或者 ".myPlugin"。
selector
類型: String
一個選擇器字符串,用於過濾出被選中的元素中能觸發事件的後代元素。如果選擇器是 null 或者忽略了該選擇器,那麼被選中的元素總是能觸發事件。
data
類型: Anything
當一個事件被觸發時,要傳遞給事件處理函數的event.data。
handler(eventObject)
類型: Function()
事件被觸發時,執行的函數。若該函數只是要執行return false的話,那麼該參數位置可以直接簡寫成 false。
.on()方法事件處理程序到當前選定的jQuery對象中的元素。在jQuery 1.7中,.on()方法 提供綁定事件處理的所有功能。要刪除的.on()綁定的事件,使用.off()。要綁定一個事件,並且只運行一次,然後刪除自己, 使用.one()
//------------------------摘錄自:http://www.jb51.net/article/78967.htm 的詳細說明
jQuery 3.0 的變化及使用方法
轉載 2016-02-01 投稿:mrr 我要評論
jQuery ,是迄今爲止世界上最流行的 JavaScript 庫,一直是我們這些 Web 開發者的神器。自從它在 2006 年發佈最初版本直到如今,已經有非常多的 Web 開發者在項目中引入了這個優秀的庫來使開發工作變得更輕鬆。
時隔 3 個月,jQuery 團隊終於發佈了 3.0 Alpha 版本。有兩個版本 jQuery compat 3.0 和 jQuery 3.0。
•jQuery compat 3.0 對應之前的 1.x, 兼容更多的瀏覽器,對於IE支持到 8.0 版本
•jQuery 3.0 對應之前的 2.x,關注更新的瀏覽器,對於IE支持到 9.0 版本
此外, 3.0還增加了對 Yandex 瀏覽器的支持,一款來自俄羅斯的瀏覽器。
1、簡化了 show/hide
之前的 show/hide 是大兼容,比如 show, 無論元素的 display 是寫在style,stylesheet裏都能顯示出來。3.0 則不同了,寫在 stylesheet 裏的 display:none 調用 show 後仍然隱藏。 3.0 建議採用 class 方式去顯示隱藏,或者完全採用 hide 先隱藏(不使用css代碼),再調用 show 也可以。
1 2 3 4 5 6 7 8 9 | <style> input { display: none; } </style> <input id= "txt" type= "text" value= "" /> <script> $( '#txt' ).show(); // 仍然隱藏的狀態 </script> |
2、data 方法兼容 data-name-11 寫法
1 2 3 4 5 | <input id= "txt" type= "text" value= "" data-name-11= "aa" /> <script> // 3.0 版本 輸出 {"name-11": aa}, 之前版本輸出 {} $( '#txt' ).data() </script> |
這個問題本質是$.camelCase方法的實現差異
1 2 | // 3.0 輸出 "name-11", 3.0 之前版本輸出 "name11" $.camelCase( 'data-name-11' ) |
3、derferred 兼容了 Promise/A+
3.0 終於可以自信的宣告支持 Promise/A 了,之前一直被詬病是閹割版的。
4、$.ajax 對象刪除了 success | error | complete 方法
這是因爲 Promise/A 規範的推動,大家對 Promise 的使用越來越多,之前對應 Derferred 上的幾個方法沒有存在的必要了
•derferred.done -> jqXHR.success
•derferred.fail -> jqXHR.error
•derrerred.always -> jqXHR.complete
1 2 3 4 | // 以下方法在 3.0 後沒有了 $.ajax().success $.ajax().error $.ajax().complete |
5、width/height,css(width) / css(height) 的返回值一律是十進制
之前部分瀏覽器特殊情況下返回浮點數。
6、 移除了註冊事件的快捷函數 load | unload | error
•load 名稱和 ajax load 同名, 含糊不清。
•unload 如果 load 去掉, unload 也沒有存在的意義了。
•error 採用 window.onerror 註冊,不是一個標準事件 hander,因此也建議移除
以上內容給大家總結了jquery3.0的變化,下面主要給大家介紹jquery3.0更新內容及使用方法。
顯示和隱藏
主要的改變是函數將如何工作的。而且有很好的理由這樣做。在早些實現上,hide() 函數設置 css 屬性爲“display:none”,show() 函數是清除這個屬性。但是這樣做有些混亂。讓我們看看幾個例子:
1. 如果當 show() 函數嘗試設置一個節點爲“display:block”而在另外一個樣式表裏實現了“display:inline”屬性,這將開始破壞代碼。
2. 當我們爲媒質處理響應式網頁設計時(RWD),我們也許會用“display”或者“visibility”改變節點的可見性。這可能會影響“show()”和“hide()”函數。
除了這些,還有很多 JQuery 團隊不得不去修復的其它問題。這導致了複雜的實現和性能問題,因此他們遷移到一個簡單的模型。
今後,如果你設置“display:none”和使用“show()”,“slideDown()”,“fadeIn()”或者類似的方法去顯示節點,它不會有效。更好的方法是使用“addClass()”和“removeClass()”控制顯示。或者可以在“ready()”調用的時候在元素上調用“hide()”。
迅速舉個例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE HTML><html> <head> <style> .invisible{ display: none; } .visible{ background-color: deepskyblue; display:block; } </style> <script src= "jquery-3.0.0-alpha1.js" ></script> <script> $(document).ready( function (){ $( "#div1" ).addClass( "invisible" ); $( "#toggle" ).click( function (){ $( "#div1" ).removeClass( "visible" ); $( "#div1" ).addClass( "invisible" ); }); }); </script> <title>Control Visibility</title> </head> <body> <p>Hello!</p> <div id= "div1" >Can you see this ?</div> <button id= "toggle" >Click me</button> </body> </html> |
.data() Key 的命名規則
jQuery 團隊改變了 .data() 函數的實現來更符合 HTML5 數據集規範。如果 data-* 屬性中的 key 包含了數字,該數字將不再參與轉換。思考下面的例子:
使用 jQuery 2.1.4:
控制檯窗口不顯示對象。
使用 jQuery 3.0.0:
由於現在數字不會參與轉換爲駱駝拼寫法,key 被轉換成了 foo-42-name。因此,我們得到了控制檯中的輸出。這個 fiddle 的網址是 http://jsfiddle.net/nWCKt/25/ 。你可以更改 jQuery 的版本來觀察變化。
同樣,如果我們想要不帶任何參數地使用 data() 顯示所有的數據,如果 data-* 屬性的 key 名在連字符(-)後面接了一個數字,則參數的數量也將會在兩個 jQuery 版本中改變,就像上面的例子一樣。
width() 與 height() 函數返回小數值
一些瀏覽 器會將寬度和高度返回爲亞像素值。現在無論瀏覽器是否支持, jQuery 的 .width()、.height()、.css("width") 都可以返回小數值了。對於爲了使用 亞像素精度來 設計網頁的用戶來說,這可能 會是一個好消息。
.load()、.unload()、及 .error() 函數被移除
這些方法早先已經不贊成使用了,現在則已經從 jQuery 3.0.0 alpha 版中被移除。推薦的方法是使用 .on() 函數來處理這些事件。簡短示例:
HTML:
1 | <img src= "space-needle.png" alt= "Space Needle" id= "spacen" > |
JavaScript:
早先的實現方式(現已不可用)
1 2 3 | $( "#spacen" ).load( function () { // Handler implementation }); |
推薦的實現方式:
1 2 3 | $( "#spacen" ).on( "load" , function () { // Handler implementation }); |
jQuery 對象現在可遍歷了
現在已經可以遍歷 jQuery 對象了,使用 ES2015 的 for-of。所以,你可以像這樣使用:
1 2 3 | for ( node of $( "<div id=spacen>" ) ) { console.log( node.id ); // Returns ‘spacen' } |
jQuery 動畫現在在後端使用了 requestAnimationFrame API
所有現代的瀏覽器都已經支持了 requestAnimationFrame(參見: http://caniuse.com/#search=requestAnimationFrame )了。由於其被普遍支持,jQuery 將會使用此 API 來執行動畫。其優勢包括更流暢的動畫及更少的 CPU 佔用(因此,可以在手機上節約電量)。
增強 .unwrap() 函數
.unwrap() 函數可以讓你在 DOM 中刪除指定元素的父元素,早先不能接收參數。如果有人想給 unwrap 設定一個條件,這可能是個問題。
在 jQuery 3.0.0 alpha 中,.unwrap() 可以接收 jQuery 選擇器做爲參數來處理這個問題。
jQuery.Deferred 升級爲 Promises/A+ 兼容
Promiseis是一個異步操作的最終結果——它是一個對象,承諾在未來交付結果。 和promise接口的最主要方式是then方法, 它註冊了回調函數。現在,在JavaScript中使用Promise來完成異步工作變得日益流行。Promises/A+是一個兼容JavaScript promises的開放標準。 (想要更多的信息,可以查看鏈接: https://promisesaplus.com/ )
從jQuery的參考文檔中,Deferred對象是一個由jQuery.Deferred()方法創建的可鏈接實用對象。它可以註冊多個回調函數放入回調函數隊列中、調度這個隊列、更新任何同步或異步方法的成功和失敗狀態。在jquery 3.0.0中,jQuery.Deferred對象升級成與Promises/A+和ES2015 Promises兼容。 這就是.then()方法的主要變更。
更好地處理錯誤情況
這個版本的 jQuery 能更好地處理錯誤 —— 錯誤請求過去一直是被忽略的,直到現在的版本纔會拋出錯誤。
舉例來說:考慮到 offset,要獲取當前第一個元素的座標,相對於文檔來說,就要匹配集合中的元素。如果你正試圖在 jQuery 的早期版本找到抵消的窗口(window),你會得到{top: 0, left: 0}這樣的結果,而不是拋出一個錯誤,這是因爲抵消窗口(window)是無意義的。而在 3.0 alpha 版本中,它就會拋出一個錯誤。
另外一個例子:$("#") 現在會拋出一個錯誤,而不是返回一個長度爲 0 的集合。
對自定義選擇器(如 :visible ) 進行了加速
當 :visible 之類的選擇器在一個文檔內多次使用時,性能得到了很大的提升。其內部是通過緩存來實現的 —— 第一次用過這個選擇器後,以後返回結果都是一樣的。但是其後的每一次調用返回結果都很快,因爲緩存起作用了。來自 jQuery 的 Timmy Willison 在 報告 中指出使用緩存後 :visible 選擇器的性能提升了 17 倍。
這些都是一些主要的更新。整個列表在他們的官方博客: http://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/ .
在哪裏下載最新版本
有兩個版本:
jQuery 3.0,其支持了現代瀏覽器: https://code.jquery.com/jquery-3.0.0-alpha1.js
jQuery Compat 3.0,其包含了對 IE8 的支持: https://code.jquery.com/jquery-compat-3.0.0-alpha1.js
也可以從 npm 中獲取:
1 2 | npm install [email protected] npm install [email protected] |