jQuery 1.4 15个你应该知道的新特性(译)


Posted in Javascript onJanuary 24, 2010

首先现在你可以从这里下载最新的1.4的版本了: http://code.jquery.com/jquery-1.4.js

1. 传递属性给jQuery

1.4之前的版本中jQuery就通过"attr”方法支持了添加属性到元素集合中,"attr”方法不仅可以传递属性名和值,也可以传递包含有多个属性的对象集合。在1.4中,除了可以创建新的对象,现在它更能将属性对象作为参数传递给jQuery函数或对象自身。如你可以创建一个含有多个属性的链接元素,通过1.4代码如下:

jQuery('<a/>', { 
   id: 'gid', 
   href: 'http://www.google.com', 
   title: 'google非和谐版', 
   rel: 'external', 
   text: '进入Google!' 
 });

你可能会注意到"text”属性并且猜测它是干吗的,因为a标签是没有"text”属性的。呵呵,当你传递某些属性时,jquery 1.4同样会检查并使用它自己的方法。因此上面的"text”属性可以让jQuery调用它的".text()”方法并将"进入Google!“作为它的唯一参数。

这里给出一个更好的例子:

jQuery('<div/>', { 
   id: 'foo', 
   css: { 
     fontWeight: 700, 
     color: 'green' 
   }, 
   click: function(){ 
     alert('Foo被点击过!'); 
   } 
 });

"id”属性是作为一个普通属性被添加的。但"css”和"click”属性则对应特定的jQuery方法。上面的代码在1.4之前一种写法如下:

jQuery('<div/>') 
   .attr('id', 'foo') 
   .css({ 
     fontWeight: 700, 
     color: 'green' 
   }) 
   .click(function(){ 
     alert('Foo被点击过!'); 
   });

 

更多关于jQuery特性

2. 所有的东西都可以"until“了

1.4新增了三个对DOM操作的方法,他们分别是"nextUntil",  "prevUntil"  和  "parentsUntil"。 这些方法会按照某个顺序去遍历DOM对象直到满足指定的筛选条件。假设我们有一个水果列表:

<ul>
<li>苹果</li>
<li>香蕉</li>
<li>葡萄</li>
<li>草莓</li>
<li>例子</li>
<li>桃子</li>
</ul>

如果你想选择所有在"Apple”和"Strawberry”之间的元素。代码可以这样写:

jQuery('ul li:contains(苹果)').nextUntil(':contains(梨子)'); 
// 得到 香蕉,葡萄,草莓

更多关于: prevUntil, nextUntil, parentsUntil

3. 绑定多个事件

与通过jquery链绑定多个方法到一起相比,现在你可以通过一次调用来绑定所有这些事件,如:

jQuery 1.4 15个你应该知道的新特性(译)jQuery 1.4 15个你应该知道的新特性(译)
jQuery('#foo).bind({ 
   click: function() { 
     // 具体代码 
   }, 
   mouseover: function() { 
     // 具体代码
   }, 
   mouseout: function() { 
     // 具体代码 
   } 
 })

 

你也可以通过 ".one()"方法操作。

更多关于.bind(…)

4. Per-Property Easing

与给一个动画仅仅定义一个缓动效果相比,现在你可以给你想要添加动画效果的属性定义不同的缓动函数了。jQuery包含两个缓动函数,旋转(默认)和线性移动。如果你需要其他的效果的话,你需要去单独下载它们 !

要给每个属性指定一个缓动函数的话,你可以简单的通过属性数组来达到目的,在数组中,第一个值是你想要实现的效果值,第二个参数则是使用的缓动函数,如:

jQuery('#foo').animate({ 
   left: 500, 
   top: [500, 'easeOutBounce'] 
 }, 2000);

 

查看代码演示!

你也可以以键值对的形式在那些可选设置项中单独指定属性缓动函数:

jQuery('#foo').animate({ 
   left: 500, 
   top: 500 
 }, { 
   duration: 2000, 
   specialEasing: { 
     top: 'easeOutBounce' 
   } 
 });

 

原文作者注 - 小小谦虚一下,这个新特性是作者James Padolsey的主意!

更多关于per-property easing

5. 新的Live事件!

1.4添加了对"submit”,"change”,"focus”,和"blur”事件的委托支持。在jQuery中,我们可以使用".live()”方法去委托事件。这在你需要注册事件到大量元素中或新的元素需要不断的被添加(使用".live()”会比不断的重新绑定事件更高效)将会很有用。

但是,注意!如果你需要委托"focus”和"blur”事件的时候,你必须使用"focusin”和"focusout”事件名称!

jQuery('input').live('focusin', function(){
//具体操作
});

 

6. 控制函数的上下文

jQuery 1.4提供了一个新的叫"proxy”的函数,它在jQuery命名空间下。该函数需要两个参数,不管是代码域还是方法名,或者是函数和其所处的代码域。t"this”关键字在JavaScrip中是相当难掌握的。有时候你可能期待它指的是你之前创建的某个对象,而不是一个你可能没想到的元素。

举例说明,假设我们有一个"app”对象,它有两个属性,一个是"clickHandler”方法, 另外一个则是一个config对象。

var app = {
  config: {
    clickMessage: '你好!'
  },
  clickHandler: function() {
    alert(this.config.clickMessage);
  }
};

当我们调用如"app.clickHandler()"时,"clickHandler"会将"app”作为其上下文。这意味着在这里"this"关键字将允许其访问"app"。这在我们简单调用下面函数时没什么问题:

app.clickHandler(); // "你好!" 消息触发

让我们试试将其作为事件绑定会有什么情况:

jQuery('a').bind('click', app.clickHandler);

 

当我们点击一个链接的时候什么都不会发生,函数不会工作。这是因为jQuery(其他任何正常的事件模型同样如此)默认会把目标元素a设置成为事件的上下文。即"this”现在其实是指刚刚被点击过的元素a。但我们实际上并不想这样子的。我们期待"this”应该被设置为"app”.在jQuery 1.4中实现这个再简单不过了:

jQuery('a').bind(
'click',
  jQuery.proxy(app, 'clickHandler')
);

 

现在无论什么时候一个链接被点击到,"你好"的消息都会被触发了!

proxy函数会返回一个你的函数被"包装过"之后的对象,在该对象中,"this”被设置成任意你指定的对象。这在其他的情景下同样有用,如传递回调函数给其他的jQuery对象或者一些插件的时候。

更多关于jQuery.proxy

7. 在动画中添加停顿

现在你可以再你的动画队列中添加停顿效果了。事实上,任何队列中都可以添加该函数,但最常用的情况应该还是在使用"fx”队列的时候。这允许你在多个动作中间添加暂停而不需要通过回调函数去调用"setTimeout"。".delay()" 函数的第一个参数是你想停顿的毫秒数。

jQuery('#foo')
  .slideDown() // Slide down
  .delay(200) // 停顿 200 ms
  .fadeIn(); // Fade in

如果你想给其他不是默认的"fx”的队列也添加停顿的话,这时候,你需要将队列名作为第二个参数传递给".delay()"。

更多关于.delay(…)

8. 检查元素是否拥有某对象

通过".has()”方法,jQuery 1.4使得检查一个元素(或者集合)是不是有某对象变得相当简单。从程序角度看,它和jQuery的selector过滤器":has()”是一样的。该方法会返回在当前集合中所有包含有至少一个符合条件的元素数组。

jQuery('div').has('ul');

 

上面方法会返回所有包含有UL元素的DIV元素数组。在这种情况下,你可能会更倾向于简单使用选择器的过滤器(":has()"), 但当你需要通过代码过滤一个数组的时候,该方法仍会很有用。

1.4同样在jQuery命名空间下添加了新的"contains"函数。这是一个低级的函数,它接受两个DOM节点作为参数。它会返回一个布尔值来表示后面一个元素是否在前面一个元素中存在。如:

jQuery.contains(document.documentElement, document.body);
// 返回true - <body>在<html>存在

 

更多关于: .has(…), jQuery.contains(…)

9. 去掉元素的包装

".warp()”已经在jQuery中有段日子了,现在跟它对应的".unwrap()”方法也被加进到1.4中了。这个方法刚好跟warp()方法相反。假设有下面的DOM结构:

<div>
<p>Foo</p>
</div>

我们可以用下面的函数去掉段落元素的外层:

jQuery('p').unwrap();

 

最终的DOM结构如下:

注意,这个方法处理比较简单,它会移掉任何元素的父节点。

更多关于 .unwrap(…)

10. detach() vs remove()

新的".detach()”方法允许你从DOM中移掉元素,这跟".remove()”很像。但与".remove()”有本质不同的是"detach()”不会将jQuery赋给该元素的数据也给注销掉。这包含通过".data()”和其他任意的通过jQuery的事件系统添加的事件等数据。

如果你想从DOM中移除某个元素,但你又可能需要在后面的某个时候把该元素重新添加到DOM中的时候这个函数将会很有用,这时候该元素的事件和其他的数据都会被保留下来。

var foo = jQuery('#foo');
// 绑定一个重要的事件
foo.click(function(){
  alert('Foo!');
});
foo.detach(); // 从 DOM中移除事件
// … 其他操作
foo.appendTo('body'); // 将元素重新加入到 DOM
foo.click(); // 弹出 "Foo!"

更多 .detach(…)

11. index(…) 加强

jQuery 1.4中我们有两种使用".index()”方法的方式。首先,你可以仅仅将一个元素自身作为参数,这样你可以得到该元素在当前集合中所处的索引位置值。

如果不设置参数的话,现在会返回该元素的兄弟节点。因此,假设有下面的DOM结构:

<ul>
<li>苹果</li>
<li>香蕉</li>
<li>葡萄</li>
<li>草莓</li>
<li>例子</li>
<li>桃子</li>
</ul>

当一个节点被点击的时候,你如果想找到在所有的节点集合中被单击的节点的位置,你可以这样写:

jQuery('li').click(function(){
  alert( jQuery(this).index() );
});

 

jQuery 1.4还允许你指定一个选择器作为".index()”的第一个参数,这样它会返回该元素在选择器中产生的元素集合中的位置。

最后需要注意的是,如果该元素在集合中存在的话,该函数会返回一个其位置的整数,如果不存在,则返回-1。

更多关于 .index(…)

12. DOM 操作的方法支持回调函数

大部分对DOM进行操作的函数现在都支持传递函数作为唯一参数了(如果是".css()”和".attr()”的情况的话,它会作为第二参数)。该函数会在集合中的每个元素上都执行一次,从而确定哪些应作为该函数的实际值提供给回调函数调用。

下面给出所有支持该功能的函数列表:

  • after
  • before
  • append
  • prepend
  • addClass
  • toggleClass
  • removeClass
  • wrap
  • wrapAll
  • wrapInner
  • val
  • text
  • replaceWith
  • css
  • attr
  • html

通过回调函数,你可以通过"this”访问数组中的当前元素,还可以通过第一个参数得到它在数组中的位置。

jQuery('li').html(function(i){
return '该列表中的索引位置: ' + i;
});

 

同样,你也可以通过上面的某些方法得到另外一个参数,如果你调用一个setter方法(如".html()”或".attr(‘href')")你就可以直接访问当前的值了。如:

jQuery('a').attr('href', function(i, currentHref){
return currentHref + '?foo=bar';
});

 

正如上面看到的,在使用".css()" 和 ".attr()" 方法时,因为第一个参数需要被用作指定那些你需要设置或改变的属性名,你需要将回调函数作为第二参数。

jQuery('li').css('color', function(i, currentCssColor){
return i % 2 ? 'red' : 'blue';
});

 

13. 对象类型判断

jQuery 1.4添加了两个新的方法(直接放到了jQuery命名空间下面)以方便我们来判断当前处理的对象的类型。

首先是方法"isEmptyObject”,顾名思义,这个函数会返回一个布尔值来表明传递的对象是不是空对象(缺乏属性--无论是对象自身还是继续的对象)。其次是方法"isPlainObject”,它会返回一个布尔值来表明操作的对象是否是一个简单的js对象(指通过"{ }"或者"new Object”创建的对象)。

jQuery.isEmptyObject({}); // true
jQuery.isEmptyObject({foo:1}); // false
jQuery.isPlainObject({}); // true
jQuery.isPlainObject(window); // false 
jQuery.isPlainObject(jQuery()); // false

 

更多关于: isPlainObject(…), isEmptyObject(…)

14. Closest(…) 增强

jQuery的".closest()”方法现在可以接受一组选择器了。如果开发人员想遍历一个元素的祖先,并在其中查找离其最近的那些符合某些特征的节点的时候,这会很有用。

另外,该函数现在也接受将上下文作为第二参数了。这意味着你现在可以控制你想在DOM中遍历的元素范围了。虽然这两种情况我们一般很少用到,不过它们在jQuery内部被很好的使用。

更多关于 .closest(…)

15. 新的事件! focusIn 和focusOut

上文已经提到,为了委托"focus”和"blur”事件你需要这些新的事件,它们是"focusin”和"focusout”。这些新的事件将允许你在一个元素或其子元素获取焦点的时候进行相应操作。

jQuery('form')
  .focusin(function(){
    jQuery(this).addClass('focused');
  });
  .focusout(function(){
    jQuery(this).removeClass('focused');
  });

 

同时应该注意的是这两个事件都不是按冒泡顺序传递,它们将按捕获顺序触发。这意味着最外层的(也即祖先)元素会在实际节点事件触发前被触发。

更多关于 focusInfocusOut 事件。

大家开始玩转jQuery 1.4吧。它是目前jQuery发布的一个最有前瞻性,最多特性支持和表现最好的一个版本!

好了,本文就到这里了。我已经开始准备跟随这个改变了,我相信这些改变同样会让你印象深刻的!

如果你还没准备好,你可以看看 "jQuery14天", 一个专门为jQuery 1.4为做的在线站点,对了,另外还是为了庆祝jQeury的四岁生日!

最后不要忘了去阅读 API 文档 !

作者:Sean Zhu
出处:http://jujusharp.cnblogs.com
Javascript 相关文章推荐
JavaScript 比较时间大小的代码
Apr 24 Javascript
JavaScript中的一些定位属性[图解]
Jul 14 Javascript
jQuery LigerUI 使用教程表格篇(1)
Jan 18 Javascript
jquery 插件学习(五)
Aug 06 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
electron实现静默打印的示例代码
Aug 12 Javascript
小程序实现图片预览裁剪插件
Nov 22 Javascript
浅谈Vue的computed计算属性
Mar 21 Vue.js
优化javascript的执行速度
Jan 23 #Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 #Javascript
JQuery 1.4 中的Ajax问题
Jan 23 #Javascript
用JS写的一个TableView控件代码
Jan 23 #Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 #Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 #Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 #Javascript
You might like
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
日期 时间js控件
2009/05/07 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
JSON相关知识汇总
2015/07/03 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
python冒泡排序简单实现方法
2015/07/09 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
将python安装信息加入注册表的示例
2019/11/20 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
表扬信格式
2014/01/12 职场文书
品酒会策划方案
2014/05/26 职场文书
总经理任命书范本
2014/06/05 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
工作失误检讨书
2015/01/26 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏