顯示廣告
隱藏 ✕
※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2013-01-15 16:37:26
看板 Ajax
作者 TonyQ (自立而後立人)
標題 [情報] jQuery 1.9.1 RC1 ReleaseNote & 翻譯(I)
時間 Mon Jan 14 02:51:18 2013




原網址
http://blog.jquery.com/2013/01/09/jquery-1-9-rc1-and-migrate-rc1-released/

短網址
http://goo.gl/oqsNN


        注意, 1.9 相對於之前版本異動改很大、非常大,
        升級時請特別注意是否有正常運作。

        舊有系統建議採用保守升級法,除了更新 jquery js ,
        另外也要載入 jquery-migrate.js plugin ,

        以避免因為升級造成現有系統出 bug。


你可以用類似以下的 code 換掉你現在的 jQuery:(當然 .js 應該先自己抓回家放)

<script src="http://code.jquery.com/jquery-1.9.0rc1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0rc1.js"></script>

        https://github.com/jquery/jquery-migrate/


        ---------------------------------

        其他更新摘要:

     @ 被移除的功能


        jQuery.browser  //移除
        jQuery.fn.andSelf()     //移除
        jQuery.sub()    //移除

        jQuery.fn.toggle()  (_event click signature only_)
                //修改行為,不過我不太確定是怎麼回事,我很少用這api。

        "hover" pseudo-event name
        //移除 hover 的特別機制,所以沒有 $(dom).on("hover") 這回事了

        jQuery.fn.error()

        //移除功能


        ajaxStart, ajaxSend, ajaxSuccess, ajaxError, ajaxComplete, ajaxStop
        global events on non-document targets

        //修改行為
        //簡言之,$(div).ajaxStart() 綁定的事件不會運作,
        //只有 $(document).ajaxStart() 才會運作

Use of attrChange, attrName, relatedNode, srcElement on the Event object
(use Event.originalEvent.attrChange etc. instead)

        //移除事件物件屬性


        底下是本來就不在文件上的,除非你自己有去爬 source才有機會誤用。

jQuery.fn.attr() using the pass argument (undocumented)
jQuery.attrFn object (undocumented)
jQuery.fn.data() data events (undocumented)
jQuery.fn.data("events") to retrieve event-related data (undocumented)

---------------------------------


        前面被移除的功能基本上比較重要,因為這次改版可預見會有升級災難,
        請大家升級時先盡量一起載入 jquery migrate js。


        但即使做了 migrate ,還是要小心以下行為的改為,
        雖然說這些行為都是一些冷門情境。

        (說真的,沒必要的話我建議大家先觀望一下這個版本,
          反正現在也還不是正式版。)


        完整原文
        http://jquery.com/upgrade-guide/1.9/


        以下為我稍微篩選翻譯的摘要:

        @ $.fn.add 現在回傳的 jQuery context 將會依照存在 dom 上的順序排序,
                    如果不在 dom 上則會被排到最後

        @ $.fn.addBack( selector ) 取代 $.fn.andSelf()

           純粹就是名字換掉而已,但這版 andSelf 還是會動。
                (migrate 後會有 warning)

        @ .after(), .before(), and .replaceWith() with disconnected nodes

           重點在 disconnected nodes ,也就是不在 document 裡的 node,
           如果你有建立新的元素的話,會被加進原本的 jQuery object nodes。

           如底下這個例子

           alert($("<div />").after("<div />").length);
           http://jsfiddle.net/b8g87/1/

           結果在 1.8.3 會是 2


           但這樣並不是我們預期的結果,所以在 1.9 後,
           不管是不是 disconnected nodes ,都會回傳原本的 context 不會改變。
           http://jsfiddle.net/b8g87/2/


        @ .appendTo, .insertBefore, .insertAfter, and .replaceAll

           這幾個函式的回傳結果會是新的查詢結果,
           而不是回傳原本的 jQuery object。


           解釋有點小複雜,請看原文: 基本上我判斷是影響不大。

As of 1.9, these methods always return a new set, making them consistently
usable with chaining and the .end() method. Prior to 1.9, they would return
the old set only if there was a single target element. Note that these
methods have always returned the aggregate set of all elements appended to
the target elements. If no elements are selected by the target selector
(e.g., $(elements).appendTo("#not_found")) the resulting set will be empty.


       @ Checkbox/radio state in a triggered "click" event

          這是個老問題:

          對一個 checkbox 而言,直接點擊他觸發的 click 事件,
          跟手動 $(checkbox).trigger("click") 他的狀態是不一致的。

          用案例來講就是這樣:
          http://jsfiddle.net/f94RB/

          為什麼最後顯示明明是有勾,但印出 false 呢?

          因為這是過了那個 event 之後才事後勾起來的,時間差問題,
          但是手工點擊時,卻是先把狀態設定為勾起來再觸發事件。


          這個問題已經被修正。(透過觸發原生 click 事件)


       @ Order of triggered "focus" events

          還是一個自己 trigger event 時會造成不一致的行為。


          瀏覽器原生的行為是當你點擊新的元素取得 focus,
          此時會先觸發舊的 blur ,再執行新的 focus。

          但自己 trigger 則會相反

          Test 1
          http://jsfiddle.net/HnM5X/2/

          原生自己點第一個 text input  再點第二個 text input 時,
          結果會是
          old focus
          old blur
          new focus


          但 1.8.3 自己 trigger
          $("#old").focus();
          $("#new").focus();

          http://jsfiddle.net/HnM5X/3/

          結果則是以下順序,1.9 就是修正成跟原生一樣。
          old focus
          new focus
          old blur

          (但是在 IE 底下因為它事件觸發是非同步的,會有可能被重複 call ,
            jQuery 官方建議使用 dom 的 focus 函式。
            ex. $("selector").get(0).focus() )


       @ jQuery(htmlString) versus jQuery(selectorString)


          簡言之, $("<div />") 這類的寫法不被建議這樣寫了,

          如果是用 "<" 開頭的他還是會解讀成 html ,
          但基本上他更希望你改用 $.parseHtml 函式...


          $.parseHTML 會回傳 DOM 而不是 jQuery object

          ex. $($.parseHTML("Test <span> hello</span>))


          如果你看到 "invalid selector syntax" 這個錯誤,
          可能就是該修這個了。

       @ Events not fired by the .data() method; names with periods

          基本上這是一個 undocument 行為的改變,照文件用的話應該不會有問題。


       @ Ordering of disconnected nodes within a jQuery set

          這版對於 jQuery object 裡面的 nodes 要怎麼排意見很多 XDDD

          過去許多版本幾乎都用他在 document 裡面的順序,
          在作為 jQuery 物件中, dom 物件的排序。

          (parents() 算是一個例外,是由內到外的順序,但是他已有在文件著明。)


          但是如果有些元件已經不在 document 上(detach or remove),
          這時候這個排序就會亂掉, 1.9 開始會按照在 document 上的排前面照序排,
          不在 document 上的排在其後的規則進行。


        /* 實在是太多了 XDDD 先睡  明天再來寫完他 */
        /* ... 未完待續 ...*/

--

        Life's a struggle but beautiful.


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.116.11
Fantasywind:先推1F 01/14 03:42
duck10704:推2F 01/14 13:32
amos6064:push3F 01/14 15:15
tomap41017:推4F 01/15 01:03

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 192 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇