2013-05-13 98 views
13

我們一直在我們的web應用程序中使用jQuery 1.4.2。最近有人建議我們升級到更新的版本。到目前爲止,我們正考慮升級到1.9.1,因爲我們需要支持IE7和IE8。 我們的應用程序使用一堆插件,例如fancybox,餅乾,醉意,jcarousel和其他一堆。另外我們有很多腳本文件,可能大約有50個文件。然後用文件嵌入一些腳本。我覺得這將是一場災難! 有沒有人有任何建議?我們尚未確定升級到1.9.1。如果我想讓我可以說服管理者升級到不同的版本。我們最安全的賭注是什麼? 請指教。將jQuery 1.4.2升級到1.9.1

謝謝!

+0

我在這裏回答了一個類似(但更通用的)問題:HTTP:/ /stackoverflow.com/a/15507363/357774。希望這可以幫助! – Noyo 2014-02-17 10:48:30

回答

12

只需查看代碼中仍舊存在的棄用函數;值得注意的是.live().delegate(),它們分別替換爲.on().attr(),其中.prop()爲替換,而.browser()。隨着新版本的推出,我一直在更新我的代碼,這很容易(大約20K行js),所以你不應該有任何問題。從我提到的功能開始,我認爲這將解決大部分問題。然後,看看Migrate插件。

+2

已棄用的函數不是問題(雖然應該轉換使用情況,但它們仍「有效」); *刪除*功能和功能是真正導致問題的功能和功能。 – user2246674 2013-05-13 03:56:08

+0

對,所以我認爲開始升級項目的最好方法是先使用最常用的函數(委託,實時,attr,瀏覽器)。被刪除的函數將很容易被發現,因爲你的代碼會被破壞;只需更換新功能。 – frenchie 2013-05-13 03:59:01

3

您可以嘗試使用jQuery Migrate plugins,該工具用於檢測和恢復jQuery中已棄用並從版本1.9開始已刪除的API或功能。

+0

也請務必閱讀升級指南... http://jquery.com/upgrade-guide/1.9/大多數插件可能仍然會繼續使用migrate插件,否則更新到更新的插件任何 – 2013-05-13 03:39:13

+0

GitHub絕對是你的朋友。我不熟悉各種遷移工具。我懷疑他們做了一份體面的工作,但無疑你必須進行迴歸測試。我們最近做了與1.4.1完全相同的升級,並且仍然在這裏和那裏修復一些小問題。 – iGanja 2013-05-13 03:42:13

+0

感謝Daniel的回覆!我將檢查Migrate插件。有關我應該升級哪個版本的其他建議?如果我們升級到不同於1.9.1的版本,會更安全嗎? – sayayin 2013-05-13 03:44:48

0

除了frenchie的回答,如果您的應用程序注入了代碼隱藏的自定義html屬性,在客戶端,這些屬性仍然只能使用attr()而不是新的prop()讀取。

根據我目前的理解,這是因爲名稱值屬性添加到元素只有當它們是DOM元素類型的本機元素時才被識別爲屬性,或者已經使用相同的客戶端jQuery prop()方法添加。

做了類似的jQuery升級的第一次,我發現這個線程關於ATTR和新道具一個非常有趣的閱讀之間的差異:prop-vs-attr

0
  1. 不要使用position屬性,例如offset選項代碼$element.position({my: 'center center', at: 'center center', offset: '5 -10'})應替換爲$element.position({my: 'center center', at: 'center+5 center-10'})
  2. 請勿使用$element.bind(),$element.live(),$element.delegate()來分配事件處理程序,請使用$element.on()
  3. 不要使用瀏覽器嗅探與$.browser,嘗試使用功能檢測代替($.support)。
  4. 請勿使用deferred.isRejected(),deferred.isResolved(),請使用deferred.state()代替。不要使用deferred.pipe(),應該使用deferred.then()方法。
  5. 請勿使用$elements.size()方法,而應使用$elements.length屬性。 .size()方法在功能上等同於.length屬性;但是,.length屬性是首選,因爲它不具有函數調用的開銷。
  6. .trigger()中的複選框/無線電狀態ed「click」事件現在與用戶發起的操作具有相同的狀態。
  7. 更改.data()密鑰的命名約定,例如,ui-dialog而不是dialog。(http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys)。
  8. 請勿使用$.ui.contains(),而應使用$.contains()
  9. 每個小部件實例已具有唯一標識符this.uuid和事件名稱空間this.eventNamespace = "." + this.widgetName + this.uuid。不要手動生成類似的東西。

原始升級指南和變化的完整列表:

相關問題