jQuery 1.9升级指南
原文:http://jquery.com/upgrade-guide/1.9/
jQuery 1.9升级指南
移除.toggle(fn1, fn2) 让toggle()回归"切换元素显示与否"的单一用途。[可透过jQuery Migrate还原]
移除jQuery.browser() 1.3就已宣告过时,1.9终于拿掉。[可透过jQuery Migrate还原] 建议改用Modernizr
移除.live() 1.7宣告过时,1.9正式移除。建议改用.on()。[可透过jQuery Migrate还原]
移除.die() 1.7宣告过时,1.9正式移除。建议改用.off()。[可透过jQuery Migrate还原]
移除jQuery.sub() 因为使用频率低,移出核心程式库,有需要请加挂jQuery Migrate。
.add() 1.9版起,加入后节点元素将会依其在DOM的出现顺序排列,没挂入document的元素摆在最后。
.addBack()取代.andSelf() 1.8版建议用.addBack()取代.andSelf()以求正名,另外.addBack()还多支援选择器参数进行过滤。例如:
$("section,aside").children("ul").addBack("aside")会得到section与aside下所有ul外加所有aside元素
。.andSelf()在1.9仍可用,但jQuery Migrate会提出警告。
离线节点的.after(), .before(), .replaceWith() 1.9版前,若针对未放进DOM的离线节点元素进行.after()、.before()、.replaceWith(),有时会传回看似相
同却非原集合的结果,1.9已排除此一令人困扰行为。 AJAX全域事件应永远以document为对象 过去如有$("#boo").ajaxStart(fn);的写法,请改为$(document).ajaxStart(fn);
.trigger()事件时的Checkbox/Radio checked状态 1.9版之前,当使用.trigger("click")或.click()触发Checkbox及Radio时,在事件中会看到与实际checked
属性相反的状态(详情可参考旧文),1.9终于拨乱反正。
focus事件触发顺序 理论上,呼叫某个元素.focus()时,应先触发前一焦点元素的blur事件再触发新取得焦点元素的focus事件,
但1.9版前顺序相反,会先触发新焦点元素focus事件才触发原焦点元素的blur事件,1.9已修正此问题。 注意: 直接呼叫DOM元素的.focus(),只有在元素原本未取得焦点且可成功取得焦点时才触发focus事件;呼
叫jQuery的.focus()则无论成功与否都会触发focus事件。另外,IE6-10 focus事件会以非同步方式执行,让
jQuery.trigger("focus")难以掌握事件执行状态,会造成focus事件重覆执行,建议改用DOM内建的focus()
较单纯,例如: $("#boo").get(0).focus()。 jQuery(htmlString)与jQuery(selectorString)
1.9版以前,jQuery以字串中是否包含HTML标籤来判定传入的是HTML字串要建立元素? 还是选择器字串要选取
元素? 在某些情境可能将选择器字串误判为HTML字串。 1.9版起改为一定要以"<"开头才视为HTML字串,遇到无法符合此要求的HTML字串可使用$($.parseHTML
(htmlString))克服。 加挂jQuery Migrate后将恢复原本行为。 .data()取得名称含"."的资料
从1.9起,.data("abc.def")只会取回名为abc.def的资料,原本还可取得abc的密技已取消。此点就算挂了
jQuery Migrate也回不去。 离线节点(Disconnected Nodes)的顺序 原则上jQuery集合中节点应依照其在DOM出现顺序排列。而在1.9版前,若jQuery集合中混杂挂在DOM的节点及
未放进DOM的离线节点,则可能出现不可预期的随机排序。 1.9起jQuery集合一律改为先依DOM的顺序排列节点,最后再加上离线节点。原来的随机排法太鸟,jQuery
Migrate决定无视它,无从恢复。
HTML字串中的Script 在1.9版以前,$(htmlString)、.append()、.wrap()会执行HTML字串所包含的Script部分并将之移除以免重
覆执行,但这违背某些稍后想再执行的情境。1.9版改为仍保留Script但标注为已执行过。 只是,把JavaScript跟HTML混在一起的现法实在不怎 入流,这点大家就当成没看到吧!
.attr()与.prop() 曾在1.6版造成争议的.attr()与.prop()分离,1.6.1版屈于现实又改回相容。1.9再次捲土重来,让.attr()
、.prop()明确区隔,减少应用上的混淆。念旧或不想改Code的人,请靠jQuery Migrate继续当鸵鸟。 老IE与$("input").attr("type", newType) 1.9版前为迁就IE6/7/8,不允许透过attr()方式修改<input> type,呼叫时会抛出错误;1.9起解禁,开发者
可以在IE9+及其他浏览器以.attr()改变input type,但如在IE6/7/8(老IE)上出错后果自负。使用jQuery
Migrate后,$("input").attr("type", newType)不会丢出例外,但console会有警告讯息。
hover虚拟事件 1.9版起,事件名称"hover"将不再是mouseenter mouseleave的替代缩写,而是指开发者要自订hover事件。
如需修改可寻找与取代一下就搞定,实在不想改,用jQuery Migrate还原吧! jQuery物件的.selector属性 过去保留.selector是为了.live(),1.9拿掉.live(),.selector也一併移除,挂jQuery Migrate也回不去了
。
jQuery.attr() 1.9版移除了jQuery.attr(elem, name, value, pass)密技,用jQuery Migrate可恢复。 jQuery.ajax取JSON结果时的空字串解析
1.9版前,$.ajax()取JSON/JSONP结果如遇伺服器传回空字串时会将结果设为null,仍算JSON解析成功;1.9
版起,空字串将被视为无效JSON触发错误,可使用error事件捕捉。
jQuery.proxy() 1.9版前,$.proxy(null, fn)、$.proxy(undefined, fn)的this会指向window,而$.proxy(false, fn)的
this则指向new Boolean(false);1.9起若context传入null/undefined/false,函数的this会维持原先
context,不被改变。
.data("events") 取回事件资料结构的密技.data("events")取消了! 用jQuery Migrate可恢复之
Event事件移除部分属性 Event物件的attrChange、attrName、realtedNote、srcElement属性自1.7版因无法跨浏览器已被宣告过时,
1.9版正式移除。如要引用请透过event.orginalEvent存取或安装jQuery Migrate恢复之。 其他消失的密技 jQuery.data()、jQuery.removeData()、jQuery.attr()移除了某些未列在文件的参数呼叫方式。
移除API不包含的部分方法 jQuery.deletedIds、jQuery.uuid、jQuery.attrFn、jQuery.clean()、
jQuery.event.handle()、jQuery.offset.bodyOffset()

浙公网安备 33010602011771号