jQuery 1.3 升级指南

jQuery 1.3提供了很多新特性,不少同学也纷纷更新到了jQuery 1.3,也有同学升级后发现有些功能失效了。这里就简单写一下jQuery 1.3的升级指南。如果这里没有提到的而你却遇到了并且解决了,欢迎留言告诉更多人。如果没,所好能写个简单测试样例以说明问题。

这里不涉及任何新增特性,只有关于修改过的内容。要看新增特性,请参考这里

翻译了通篇文档,主要发现以下几点容易导致升级失败:

1,取消了属性选择器的@前导符号。这点会造成升级失败。虽然这个@符号在jQuery 1.2中已经不推荐使用了,但由于种种历史原因还是有很多人用。修复这个问题的方法很简单,只需要简单删除那个@符号即可。

2,trigger()方法触发的事件会冒泡了。这点可能在某些重要的功能上发生偏差。尤其是一些大项目上。要解决这个问题,需要在事件处理函数里加上e.stopPropagation() 或者函数返回false即可。

3,这点实际上并没有在发布信息中提到,但却也是很重要的问题。[attribute!=value]这个属性选择器在jQuery 1.3之前是这样的:”匹配那些没有指定的属性的元素,或者指定的属性不等于特定值的元素。”,这等价于:not([attr=value])。而在jQuery 1.3中是这样的:匹配所有含有指定的属性,但属性不等于特定值的元素。
这个改动是为了符合w3c的标准。虽然有点绕……
要解决这个问题,上面也已经提到了,有选择得使用:not([attr=value])代替即可。(但目前这个似乎在ie下有bug,依然跟以前的表现一样,ff和chrome下符合这个描述)

1.3.1中又改回来了……[attribute!=value]依然等价于:not([attr=value])。如果要找含有特定属性且不等于指定值的请继续使用[attr]:not([attr= value])

更多的问题尚未发现,如果各位同学遇到了请不要吝惜提出来~谢谢。

jQuery 1.3 中文文档发布

jQuery 1.3自从2009年1月14日发布后,后引来了各界的关注。我们也随即投入到翻译文档的工作中来。经过4天的努力,终于完工了。这个版本更新了不少东西

changelog:

2009-01-21 20:23:38 +0800
* #4 关于1.3版的日期 (感谢liushuang630)
* #5 die()的标题误为toggle() (感谢dadao5.com)
* queue([name],callback) queue([name],queue)少参数 (感谢Horatio)

2009-01-19 00:00:10 +0800
+ offsetParent()
* closest() 说明

2009-01-18 16:06:52 +0800
* triggerHandler 进一步说明
* trigger 进一步说明

2009-01-17 22:37:11 +0800
* live() – 与bind()不同的是,live()一次只能绑定一个事件。
* [attribute!=value] jQuery 1.3中意义改变
* load 的data参数在jQuery 1.3中也可以接受String
+ ajax的error回调的第二个参数可能值”timeout”, “error”, “notmodified” 和 “parsererror”
+ ajax参数xhr
* animate 的duration为0的问题
* show, hide, toggle, slideDown, slideUp, slideToggle 在jQuery 1.3中,padding和margin也会有动画,效果更流畅。
* jQuery(html,[ownerDocument])等效于$(document.createElement(“span”)
* is支持复杂表达式

2009-01-17 18:31:10 +0800
+ jQuery.support.scriptEval
+ 原 Dimension 插件功能(1.2.6版加入jQuery核心)

2009-01-16 19:11:10 +0800
+ jQuery.fx.off
+ toggleClass( class, switch )
+ toggle( switch )
+ toggle(speed,[callback])
* 修改queue和dequeue方法的参数和说明

2009-01-15 22:31:02 +0800
* jQuery(html,[ownerDocument])
+ jQuery.selector
+ jQuery.context
* 效果下的queue和dequeue搬到核心下
+ live()
+ die()
+ closest()
* stop( [clearQueue], [gotoEnd]) 增加两个参数
+ jQuery.support
+ jQuery.isArray( obj )

感谢Cloudream的热情帮忙。还要感谢一揪制作chm版。这个版本还加入了检查更新的功能。如果有需要的同学可轻松查看是否有更新的中文文档(chm版中的检查更新也将同步升级)。目前chm版尚未完工,请稍候。
继续阅读jQuery 1.3 中文文档发布

live不是万能的

众所周知,jQuery 1.3版中有个很重要的功能是新增了live方法,这个方法可以为现在以及将来出现在页面上的元素绑定事件。
而这个live方法的原理是什么呢?

根据官网上live的文档上找到了这样一个地址
进去一看才知道,所谓神乎其神的方法,其实就是事件冒泡+e.target
跟我先前关于事件重复绑定的文章中的方案二如出一辙。进一步求证,查看jQuery源码,可以在2854行发现如下代码

jQuery(document).bind( liveConvert(type, this.selector),
this.selector, proxy );

这下就明白了,原来live其实就是给document绑定了事件处理函数,这样所有新增的元素的事件都能够冒泡到document上,实现了事件的动态委派的过程。这样极大得简化了本来需要自己管理的冒泡+e.target代码,都交由jQuery来管理了。

但这却会有一定的局限性:e.stopPropagation,对,聪明的你一定想到了,就是这个方法会失效。即使是普通的click的事件,想不让他冒泡都是不可能的。因为事件处理函数就是等事件冒泡到document上之后才触发的,此时再阻止冒泡已经为时已晚。所以,当遇到此类事情的时候,各位同学没办法……只能重复绑定或者用clone(true)咯……
live虽好,但不能乱用,视情况而定才是王道。

不过,幸运的是,e.preventDefault依然可以使用。所以可以说,在事件处理函数中,return false并没有完全废掉。

jQuery 1.3 正式版发布公告

http://docs.jquery.com/Release:jQuery_1.3

jQuery 1.3终于发布了。
min版(gzip后18kb)
源码(114kb)

另外可以用google的代码托管:
http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js

下面这个是我自己用Packer压缩的pack版
http://shawphy.com/down/jquery-1.3.pack.js(37kb)

简要来说:

更新了Sizzle选择器引擎,这个之前也提到过。可以查看他的性能:

此外据声称,把代码给了dojo基金会。这回Sizzle的野心在于能够让其他各种JS库都能用,包括Prototype, Dojo, Yahoo UI, MochiKit, 和 TinyMCE等等其他库。

live 事件
这也是jQuery 1.3这次更新的第二个重大更新。

可以看下面iframe中的效果以及源码

性能比较:

这样,我以前写的关于重复绑定的文章就差不多可以抛弃了

Event 对象
新增了一个jQuery.Event对象,他根据w3c文档,做了一个完整的,兼容所有浏览器的一个对象。具体还得看文档。

append, prepend, before, 和 after 方法重写
据声称,这些方法的效率提升了6倍

重写了offset方法
这回更快了

取消了浏览器侦测,全面改用jQuery.support
具体还得看文档了。
变化:
其中与开发者比较密切的是
[@attr] 中的@在1.3里不能用了
用trigger触发的事件现在能冒泡了
ready方法中,再也不等css加载完了再执行其中代码了。直接要求把css放在脚本之前就行
简化了.isFunction方法,那些偏门的就被无视了
用选择器a, b, c选择东西,在支持querySelectorAll (Safari, Firefox 3.1+, Opera 10+, IE 8+)中会按照这些元素在文档中顺序来确定这些数组在获得的对象列表中的位置。而不支持这个方法的浏览器则按照选择器顺序排好
新增了jQuery.Event
要求网页都在标准模式下,不要在怪异模式下使用,否则会报错。
以下3个方法属性已被不推荐使用。
* jQuery.browser
* jQuery.browser.version
* jQuery.boxModel

具体内容:
内核部分:
更好的queue, dequeue
新增selector, context这两个属性,分别指向获取这个元素的原始选择器和被查找的内容(可选)
选择器部分:
Sizzle的使用
复杂的css例如not(a, b)
属性部分:
toggleClass( “className”, state ) – 增加了一个布朗值的参数。
筛选文档:
.closest( selector ) – 找到离这个元素最近的一个父元素。这跟parents不一样。
is() 也支持更复杂的选择器了。
操作文档:
HTML Injection重写了
$(“<script/>”) 就自动转化为 $(document.createElement(“script”))
css:
offset()重写了
事件:
Live 事件
jQuery.Event
trigger()会冒泡了
效果:
hide() .show()之类的加快速度
内置动画效果考虑到了margin和 padding
.toggle( boolean ) 多提供了一个参数
jQuery.fx.off 关闭所有动画
AJAX:
.load()支持了文本格式的数据
工具:
新增jQuery.isArray

内部:
jQuery.support

另外这回改用YUI的工具压脚本了

========================================

最后预告一下,jQuery文档官网已经针对1.3版做了修改,中文文档也在紧张制作中。
文档地址:http://jquery-api-zh-cn.googlecode.com/svn/trunk/index.html

那个@终于要消失了

http://blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2/
jQuery 1.3 beta2 发布了,当然好多天以前的事情了。就等14日正是发布了。
这意味着从jQuery 1.1开始带来的的@终于要被废除了。原因很简单,用了新的Sizzle引擎了嘛,要一个独立的引擎来支持另一个使用他的脚本库的老版本,始终不现实。
这也意味着,网络上流行的教程在最新的版本中将行不通了。(感觉跟Python升级到3.0后的print变成了函数一样的感觉……)
实际上我至今还看到国内有很多新手在使用[@type=checkbox][@checked]之类的选择器而不使用:checkbox:checked这种1.2版以后的选择器。
这方面还需要各位前辈多多推广才行。
如果能联系到
http://www.k99k.com/jQuery_getting_started.html
这里的网站管理者的话,希望能够在这个国内最广为流传的入门教程底下,加上一两句提醒的话,告知新手,这份教程中哪些地方在1.3版中不适用了。凡请转告一下吧。
而其他转载了这篇入门教程的同学看到了的话,也最高改一下自己的版本(虽然我知道这样不厚道,但为了“下一代” 麻烦改一下吧。^_^)

另外很高兴看到,在这版中的live可靠很多,不像上一版中,如果选择器使用 #id>span 这种,就报错了。这回就很好用了。相信1.3正式发行的时候会很好用的。

http://blog.jquery.com/2008/12/31/jquery-ui-16rc3-its-getting-really-close/
另外,这里说jQuery UI 1.6rc4发布了(rc3里的datepicker有重大bug)。有关注这方面的同学可以看看,当然,jQuery UI的文档一直是个大问题要感谢Cloudream同学,他为现在身为jQuery UI文档组成员,一直为其文档做出重要的贡献!(真期待哪天弄个中文版出来就更好了……恩^_^)

08的小结

08过去了,09来了,本来这个小结应该前几天写的,但总因为种种事情而耽搁了,现在补回来。
细数这个博客开张马上就满一年了。最开始用了pjblog现在换成了wordpress
中间又断了将近半年事件。
说是以前端为主,但其实发现关于HTML和CSS内容很少,基本上都是jQuery为主。
即将到来的2009年里,这里可能会有新的内容,涉及正则表达式,Flex,Python,PHP也可能有EditPlus和VIM。而HTML和CSS以及JS、jQuery内容依然会跟进。服务器我也打算搬到国内来。Godaddy的实在太慢,我用不下去了……
一不小心小结变成了展望,罪过罪过。总之,过去一年多谢各位的支持,将来一年请继续支持!

我的卓越亚马逊和当当购书经历

Story
这两家在国内可以说是走在风口浪尖上的两家B2C公司,也都逐步从之卖书到了什么都卖的大百货转型。
这回我从我前几天想买的一本《精通正则表达式:第3版》。不要问我为什么不从china-pub买,只因为我对价格比较敏感。而不在乎书谁先出来。
各位也都可以从上面豆瓣链结里看到两个店的价格是一样的,都是55.9,蔚蓝在豆瓣页面里写是55.5,实际点进去是37.5 见:这里 。(我才发现……书已经到手……不退了……其他同学有兴趣的赶紧下手……机会难得……不过最好先问清版本。)
事情是这样的,很早就眼馋这本超越语言界限的圣经级别的《精通正则表达式》了,年初的时候想买,但看到了勘误表之后慌了,这么多错误,我买回来自己一个一个对着勘误表现改一通可就累了,而且我也没有在书上写字习惯。所以就忍了。这几天看到了说第三版已经在卖了,就盘算着买了。
好了,罗嗦了这么久,正式开场

Act 1
跑到卓越当当上,都没有看到关于印次。而底下评论问第几次印刷的版本的,也不见有客服来回答。所以打算直接问客服了。
这局打平,两家都做的不好,当当上有“印次”和“印刷时间”的栏目,但没写,卓越压根就没有,只有“版本”这个栏目。

Act 2
先说卓越,在页面最下面“如您需要帮助或对我们的客服有疑问,请联系我们。”。OK,点进去后就有了一个界面,填写信息后,等回音了。
接着是当当,在页面里死活找不到售前服务的地方(除了那个没用的提问部分),只在页面最底下找到了”常见热点问题/找回密码/顾客建议/顾客投诉”

点哪个呢?肯定不是找回密码(这东西怎么放这里?放登录窗边上不就够了?),我也不想投诉也没有建议阿,想了半天,还是“常见热点问题”吧。进去,找了半天,什么新手指南,什么退款换货保修一应俱全,就是没有售前服务,只有一个“联系客服”,得这算是我要的了吧。进去一看,邮箱和400电话。OK,打开GMAIL,寄了邮件过去。

给卓越的客服留言:

这本《精通正则表达式(第三版)》
http://www.amazon.cn/dp/bkbk728354
我想确认一下是第几次印刷的版本。并且如果可以的话,请客服能顺便修改一下页面上的资料以方便其他读者。

给当当的邮件:

当当网的客服:
你好
我想买《精通正则表达式(第三版)》
http://product.dangdang.com/product.aspx?product_id=20028613
但我不能确定这是第几次印刷的(以及印刷时间)。所以发信来询问一下。并希望能够顺便更新一下页面资料,以方便其他读者。
谢谢

by Shawphy

这局,当当大败,浪费了我很多时间。到最后都要我用自己的邮箱给他们写信。

Act 3
2008年12月19号当天(周五),在我发邮件一两个小时后,卓越的客服先给我的邮件。下午两点就给我回信了。
而当当我晚上8点发的邮件,第二天凌晨2点给我邮件……
卓越我是白天发的邮件,当当我是半夜2点发的邮件。卓越我看不出来邮件服务是不是24小时的,至少当当是24小时的。
当当小胜,当然也因为我的实验产生了一定的误差,所以本次实验信度不是很高,各位看官酌情取舍。

Act 4
以下给出邮件主要部分(客套话就省了,虽然我不看,但他们得写)。
卓越给我的邮件:

亲爱的朋友:

您好!感谢您的email。

很抱歉,您询问的商品:《精通正则表达式(第三版)》,问题我们暂时不能确认,我们和相关部门确认后会尽快回复您,

并且会通知编辑人员更新页面信息。请您放心。

当当给我的邮件:

亲爱的顾客:

您好!非常感谢您对当当网的支持!非常抱歉,对于商品信息我们和您浏览的是同一个网页,我们看不到商品实物,如果您想了解商品更多的信息,您可以到商品单品页面提交评论,我们网站的编辑看到后会第一时间回复您。

我第二天周六10点半发现了这份回信,很日……回信曰:

当当的客服:
你好
非常感谢你能及时反馈
但遗憾的是问题并没有能解决。
实际上如果可以仔细看一下的话,我早在今年6月19日就在此商品单页中提出关于印刷版次的问题,但半年过去了,至今没有任何答复。
现如今我直接发邮件给客服,也没能得到满意的答复。
希望当当各部门间能够更协调办事,能尽早给我们顾客一个满意的答复,谢谢。

by Shawphy

50分钟后,回信曰:

亲爱的顾客:

您好!非常感谢您对当当网的支持!

经查询,此商品为第3次印刷,印刷时间为2007/07/01,详细信息建议您察看商品的单品页面。同时此商品的内容如与网页介绍不符,建议您将其不符之处告知,以便处理。

我再日,曰:

当当的客服:
你好
非常感谢及时能够回复邮件。
但遗憾的是依然没有能解答我的问题。
此书《精通正则表达式》”第3版”指的是 原书 第3版。
与第3次印刷不是一个概念。07年7月1日应该是第1次印刷。
此书据译者的博客上说,今年08年又有过两次印刷。并且修正了第一次印刷中的大部分错误。
所以我比较关心此书到底是第几次印刷版的。
也就是我比较关心当当页面上的”印次”和”印刷时间”这两项,而不是”版次”这一项。
希望能够进一步核实。
再次感谢辛勤的工作。

此后截止至本博文发表时,尚未有进一步回音(我保证我垃圾箱里也看过了,确实没有回信了)。事实面前,各位看官心知肚明,不用我作过多评论了。

Act 5

23号星期二下午1点48分,受到了卓越的邮件:

亲爱的朋友:

您好!感谢您的email.

非常抱歉耽误您的时间了,关于您询问的精通正则表达式(第3版)问题,经与相关部门工作人员确认,此图书是第3次印刷的版本。

OK,看到邮件后,马上下单,此时是四点半左右。

Act 6
昨天收到邮件说出库了,今天中午收到书,确认是第三次印刷的版本。

=============================================
历时6天,卓越最终打出一个Good Ending,当当打出一个Bad Ending。
最后指出一个卓越的小瑕疵,我在邮件的反馈里提到,说希望尽快完成页面上的信息。但我书已经到了,页面上还没改。

jQuery 1.3更新的内容

前两天jQuery更新出了jQuery 1.3的beta版,今天有空看了看到底更新了点什么
看了下代码,选择器用上了新的引擎Sizzle咯。(Sizzle为何?见下面简介)
得益于新的引擎,选择器支持:not(div,p)这种了多重的not了
增加了一个closest方法,用来找最近的一个匹配选择器的父元素。
LiveQuery似乎也集成了,用$(elem).live(type,fn)就能注册事件了,新添加的元素也同样享受这个服务~无须重新帮定了。不想要的时候让他die()就行了。
更多的还没来得及看,不过看到了JavaEye上的文章,把这次的更新都说全了。可以移步去看看。Cloudream在两个月前就对jQuery 1.3的alpha有所阐述了,建议也可以看看。
这次刚刚升级的大版本Bug一般都会很多,所以请不要急着用于产品中,建议等到明年3、4月份的时候有没有新的修正版出来的时候再升级到1.3版。

补充内容:
Sizzle是jQuery作者John Resig新写的DOM选择器引擎。其速度号称业界第一……
不过简单看了一下,对于支持document.querySelectorAll的浏览器就主要用这个了(比如IE8),支持getElementsByClassName的也会优先用这个(Firefox等)。
也还有一些其他优化。
如果只想要用一个出色的选择器工具而不想要引入jQuery,可以考虑直接用Sizzle,超好用。压缩后才3、4K。完全可以基于此开发一套自己的脚本库。

Help Test jQuery 1.3 Beta 1

jQuery: » Help Test jQuery 1.3 Beta 1.

没啥说的,jQuery 1.3的beta 1发布了,

有能力的各位都测试一下,有问题的汇报一下

把引用脚本的地址改成

http://code.jquery.com/jquery-1.3b1.js

就行。不要用min或者pack版,不好定位问题

主要改了选择器引擎,DOM操作,offset()方法,事件命名空间和事件触发等部分的逻辑。尤其是事件触发的部分,现在会冒泡了,可能导致问题。

具体jQuery 1.3会预计在1月14日发布。

发现问题可以去jQuery bug tracker 提交问题。别忘了附上精简过的测试代码就行。

[推荐]jQuery 源码分析

不得不承认,我看到这个帖子晚了好几个月。
但幸运的是,我在年末的时候看到了。Better late than never.
就当作圣诞礼物送给我自己吧。
也送给各位:
http://jljlpch.javaeye.com/blog/234218
非常全面得分析了jQuery 1.2.6
100多页的pdf文档,引用fins的话是,这是今年JavaEye上精华中的精华了。
没看过的请务必去看一下。