题外话:前两天回了一趟泰州,星期二上班后看到了两条比较重大的新闻:1.谷歌耍了我们这些谷歌迷们一把,决定不离开中国了;2.jQuery1.4新版本也正式上线了。
从Nettuts+博客上看到了这票jQuery1.4新特性的总结性文章,该博总结了15条新的特性,便给出相应的实现代码。觉得不错,便整理后翻译过来供大家参考,并加入了1.32版本的实现方法进行比较性地学习。
文章较长,分两篇文章发布,请关心者耐心阅读与等待!上篇包含特性1-8点,下篇9-15点隔一日再发布!
一、给jQuery(…)方法传递新的参数:
jQuery()方法是jQuery库的核心方法之一,在1.32版本及早期的版本中,该方法是用来获取节点或者创建DOM对象的,它只支持一个参数。在使用来创建新的DOM对象时,我们若要给该DOM对象添加属性的话,只能通过attr()方法在后面追加,很是不方便,阅读起来也比较累。在jQuery1.4中,给jQuery方法新增了一个对象型的参数,用来创建新的DOM对象设置该DOM对象相应的属性。
jQuery1.32版本中实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | jQuery('<a></a>').attr({ id: 'foo', href: 'http://google.com', title: 'Become a Googler', rel: 'external' }).text('Go to Google!') .css({ fontWeight: 700, color: 'green' }) .click(function(){ alert('Foo has been clicked!'); }); |
jQuery1.4版本中实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | jQuery('<a />', { id: 'foo', href: 'http://google.com', title: 'Become a Googler', rel: 'external', text: 'Go to Google!', css: { fontWeight: 700, color: 'green' }, click: function(){ alert('Foo has been clicked!'); } }); |
>>>>阅读更多关于jQuery(…)方法的资料…
二、新增”until”系列方法:
新增”until”系列方法中有三个方法:”nextUntil”, “prevUntil” 和”parentsUntil”,这些方法是用来获取符合条件内的DOM对象。中文你可以理解为“直到”的意思。
若有一段XHtml代码如下:
1 2 3 4 5 6 7 8 | <ul> <li>Apple</li> <li>Banana</li> <li>Grape</li> <li>Strawberry</li> <li>Pear</li> <li>Peach</li> </ul> |
现在我想选取从含有apple的li到含有pear的li,则代码实现:
jQuery1.32版本中实现代码:
1 | jQuery('ul li').slice(1, 4); |
jQuery1.4版本中实现代码:
1 | jQuery('ul li:contains(Apple)').nextUntil(':contains(Pear)'); |
虽然上面两者的选取效果是一样的,但若现在我在含有apple的li到含有pear的li中间再添加内容的话,1.32版本的代码就需要修改了,而1.4版本的则可继续使用,也就说1.4版本的代码可用性和语义性增强了。
>>>>阅读更多关于prevUntil, nextUntil, parentsUntil方法的资料…
三、给事件对象一次绑定多个事件:
1.4不再像1.32版本中那样链式地给一个时间对象绑定时间,现在你可以将多个时间归纳后绑定到一个方法中。
jQuery1.32版本中实现代码:
1 2 3 4 5 6 7 | jQuery('#foo).bind('click', function() { // do something }).bind('mouseover', function() { // do something }).bind('mouseout‘, function() { // do something }); |
jQuery1.4版本中实现代码:
1 2 3 4 5 6 7 8 9 10 11 | jQuery('#foo).bind({ click: function() { // do something }, mouseover: function() { // do something }, mouseout: function() { // do something } }); |
当然对.one()一次点击事件也是适用的哦!
>>>>阅读更多关于.bind(…)方法的资料…
四、Per-Property Easing动画效果
在1.32版本中,我们使用animate()方法给对象添加动画效果时,特效很单一,只能再引入jquery.easing.js插件来丰富动画特效。在新版本1.4中将该插件集成到了jQuery库中,这样在使用过的过程中就更加地方便了。
jQuery1.4版本中实现代码:
1 2 3 4 | jQuery('#foo').animate({ left: 500, top: [500, 'easeOutBounce'] }, 2000); |
当然也可以给附加的属性参数内添加动画效果,如:
1 2 3 4 5 6 7 8 9 | jQuery('#foo').animate({ left: 500, top: 500 }, { duration: 2000, specialEasing: { top: 'easeOutBounce' } }); |
>>>>阅读更多关于per-property easing的资料…
五、新增live事件:
在1.32版本中,live()方法只对click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup这些时间提供了支持,而不支持也比较常用的focus和blur时间。在1.4版本中新增了submit, change, focus, blur四种时间的支持。其中focus对应的是focusin事件,而blur对应了focusout事件。
jQuery1.4版本中实现代码:
1 2 3 4 5 | jQuery('input').live('focusin', function(){ // do something with this }).live('focusout', function(){ // do something with this }); |
六、控制方法的上下文对象:
1.4版本在jQuery命名空间下新增了一个名叫”proxy“的方法,该方法有两个参数:一个是作用域,一个是准备执行的处理方法。在Javascript中,this关键字很巧妙地自动执行父亲对象或某个DOM元素对象。当有时候我们希望this指向的不是一个DOM元素对象,而是希望它指向一个之前创建的对象。
举个列子,就很容易明白!比如,现在我们有一个app对象,该对象内部有一个”clickHandler“方法和一个命名为”config“的对象。代码如下:
1 2 3 4 5 6 7 8 | var app = { config: { clickMessage: 'Hi!' }, clickHandler: function() { alert(this.config.clickMessage); } }; |
当我们调用app.clickHandler()方法时,app对象就有了自己的上下文对象:clickHandler方法中的this指向的是app对象。执行后会弹出内容为”Hi!“的提示框。若现在我希望将该app对象下的clickHandler方法绑定在一个超链接上,如下:
1 | jQuery('a').bind('click', app.clickHandler); |
而此时,当我们点击该超链接时,app对象下的clickHandler方法并不会执行,用Firebug测试则会提示”app.clickHandler is not a function!”。原因在于jQuery(以及绝大部分的事件对象)默认地将事件对象作为了该clickHandler方法的上下文对象,也就是此时this指向了a超链接标签元素。而我们的实际愿望是希望this执行app对象,那么1.4中我们就可以使用新增的proxy()方法来处理这一问题。代码如下:
1 2 3 4 | jQuery('a').bind( 'click', jQuery.proxy(app, 'clickHandler') ); |
这样执行后提示框就会正常地弹出了。proxy()方法返回的是一个包装后的方法,它将执行你所期望的对象(通过第一个参数传递)。这在其他上下文对象中也很实用,比如给其他方法或插件传递回调函数。
>>>>阅读更多关于jQuery.proxy()方法的资料…
七、延迟动画队列:
在平时编写代码时,你或许发现有一个动画效果还没完成呢,下面的代码就已经执行完了。而我们希望的是等动画效果执行完成后或执行一段时间后再执行后面的代码。1.4版本中新增了delay()方法来延迟代码的执行。
jQuery1.32版本中实现代码:
1 2 3 | setTimeout(500, function() { // do something }); |
jQuery1.4版本中实现代码:
1 2 3 4 | jQuery('#foo') .slideDown() // Slide down .delay(200) // Do nothing for 200 ms .fadeIn(); // Fade in |
若你希望延迟一个动画队列比默认的“fx”(queue()函数的默认参数)还要慢的话,你只需要将这个queue的变量名当作delay()方法的第二个参数传递即可。
>>>>阅读更多关于.delay(…)方法的资料…
八、判断一个DOM父对象中是否含有某个匹配的子对象:
1.4中新增了一个过滤型的方法has()来判断某个对象是否在某个标签或集合内出现过。该方法将返回在标签中出现的所有匹配子对象的集合,至少会包含一个子对象。若没有找到匹配子对象,则返回的是一个空的集合。
1 | jQuery('div').has('ul'); |
当然jQuery1.32版本中的.contains()方法其实也可以达到同样的效果,1.4版本又对.contains()进行了完善。在1.4版本中通过给.contains()方法传递两个DOM对象参数,从而判断第二个参数对象是否在第一个参数对象中。代码如下:
1 2 3 | jQuery.contains(document.documentElement, document.body); // Returns true - <body> is within <html> </html></body> |
>>>>阅读更多关于.has(…),jQuery.contains(…)方法的资料…
剩余的7点新特性隔一日发布!敬请期待吧,呵呵。






技术文章啊。学习
真渴望有个时间可以给我好好的,系统的学习下jQuery!
jQuery确实有个好东西,这次我们公司的项目的前端代码我都是用的jQuery库实现的。
恩,同意,俺很喜欢jQuery搞的导航。
哈哈。我从Google上搜索到你这儿了,很强大,正学习中!
欢迎学习!!