DIV CSS 佈局教程網

jquery升級到1.9以上
編輯:JQuery常見問題     
jQuery1.9.0發布已經好久了吧,大概是1月15日發布的,一發布就聽微博上有人說,此次升級會死掉大批插件,因為jQuery1.9.0移除了很多用的較多的api,糾結了很久,還是決定倒騰下,升級本站的jQuery到最新的1.9.1。可能官方也是知道此次升級較大改動,官方也出了文檔和插件,幫助用戶升級,這個很贊。

上面說到的官方插件是一個集檢測和兼容於一體的插件,有官方說明文檔,對於只想簡單升級內核,不想更改原有代碼的童鞋來說,你只需要升級jQuery到最新的1.9.1,然後在其後引入官方的jquery-migrate插件,這樣你就能最方便的無縫升級到jQuery1.9.1,此插件會報告你現有代碼中的存在兼容性問題的代碼,並在控制台以警告顯示,如圖:


相當有人性的插件,不得不佩服jQuery官方的態度,國內的很多開源軟件是沒法做到的!

但是,也有童鞋不願意額外去引入這個插件,比如說我,貌似有代碼潔癖,沒用的,一概不想出現在頁面上,也許是職業病吧。不想引入,怎麼升級到最新版呢?辦法只有一個,參照jQuery給出的升級指南,找到現有代碼中所有改動的api,重寫這部分改動過的部分以兼容新版。我說說我自己碰到的升級的問題及一些解決方案。

1.attr,如果像是取‘checked’或者‘readonly’這種屬性,請換成prop,官方建議這樣,舉個例子:

$('checkbox').attr('checked', 'checked'); //不推薦
$('checkbox').prop('checked', true); //推薦

2.hover,這個用的非常多,但是不知為啥,官方去掉這個方法,建議用“mouseenter mouseleave”代替,舉個例子:

$('body').hover(function, function); //舊
$('body').on({'mouseenter': function, 'mouseleave': function}); //新


3.toggle,這個指的是.toggle(function, function, ... ),不是控制一個元素隱藏顯示的那個方法,不要誤解。這個要根據自己的條件跟方法去找到替代的方法,這裡就不舉例子了。

4.jQuery.browser(),這個現在是直接被干掉了,建議用其他第三方的檢測浏覽器的庫或者通過原生的navigator.userAgent來判斷,這裡推薦用Modernizr,非常專業,非常強大,不僅僅是浏覽器,還有更多請自行發掘。不想引入整個庫的可以根據自己的需要自行下載部分源碼,地址:http://modernizr.com/download/

5.live/die,這個api之前用來動態綁定和解綁的,在jQuery1.9.0後,其被刪除了,直接用“on/off”替換源碼裡面的live即可。

6.$(html),這裡的‘html’必須以“<”開頭,否則要報錯,其他的字符應該不太會有,就怕有空格,我這裡的解決方案是使用$.trim()處理下“html”。

7.AJAX事件只能綁定在document上,不能再綁定到元素上,舉個例子:

$("#status").ajaxStart(function(){ $(this).text("Ajax started"); }); //舊
$(document).ajaxStart(function(){ $("#status").text("Ajax started"); }); //新
好了,差不多了,還有一些不太常用的。

更多參考:
jquery1.9的變化(官方升級指引沒有提到的變化)

今天從jquery1.7.1 升級至jquery 1.9.1,踩到兩個坑,在此記錄一下,方便其他朋友解決類似問題。

1、data() 在不存在節點時的差異:
取一個不存在節點的data值時,在1.7版本會返回undefined,而在1.9.1會返回unll。
假設頁面上不存在id為none的節點,但有以下JS代碼:
$('#none').data('anyKey'); 在1.9.1會返回null。
所以不要只用typeof $('none').data('anyKey') == 'undefined' 來判斷該值。

2、$.parseJSON方法的差異:
假設後端有返回一空的JSON數據,並且他意外地只是一空字符串,當然這種字符串的可能性是非常小的,因為通常後端都會有方法處理成正常的JSON格式,如PHP的json_encode()函數。
但是總有意外的時候,你期望要解析的JSON字符串,僅僅是一空字符串。那麼,在jquery1.9.1的$.parseJSON()將會出錯。
$.parseJSON(''); //SyntaxError: JSON.parse: unexpected end of data
在jquery1.9.1之前不會報錯,看來要把容錯處理要留給用戶來做了。
解決方法:
$.parseJSON('{}');
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved