作者TonyQ (自立而後立人)
看板Ajax
标题[情报] 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
1F:推 Fantasywind:先推 01/14 03:42
2F:推 duck10704:推 01/14 13:32
3F:推 amos6064:push 01/14 15:15
4F:推 tomap41017:推 01/15 01:03