我也是这两天在朋友的博客上看到jQuery 1.3.3即将出来的消息的,虽然到目前为止jQuery官方还并未发布jQuery 1.3.3库的源码,但前段时间开发组的Brandon Aaron已经在自己的博客上对jQuery 1.3.3的新功能做了简单的更新介绍,在此简要地介绍一下: 一、简化了.hover()方法: 在jQuery 1.3.3中,悬停方法:.hover()将可以有选择地接受一个单一的方法,而无须同时提交两个交互方法。这样,我们就可以用一个包含逻辑的单一方法来完成一个重复的交互事件。简化后的.hover()方法有利于将一个的(mouseenter and mouseleave)鼠标进入与离开的交互事件用一个单一的事件来处理。让看看一个典型的用例,早期版本的实现: - $('li')
- .hover(function(event) {
- $(this).addClass('test');
- }, function(event) {
- $(this).removeClass('test');
- });
优化后的实现:(这个是Brandon Aaron推荐在早期版本的中的实现) - $('li')
- .bind('mouseenter mouseleave', function(event) {
- $(this).toggleClass('test');
- });
jQuery 1.3.3中使用简化后.hover()的实现: - $('li')
- .hover(function(event) {
- $(this).toggleClass('test');
- });
有时我们可能会在更多的复杂交互中不仅仅只切换一个类。在这些情况下,我们只需检查事件类型,然后传递给处理程序。下面是一个例子检查事件类型:
- $('li')
- .hover(function(event) {
- $(this)[ (event.type == 'mouseenter') ? 'add' : 'remove') + 'Class' ]('test');
- });
在上面的例子中我们仍然只是切换类的元素(over/out),但这样做更详细地说明如何您可以检查事件类型。 二、.live()冒泡事件的更新: 在jQuery 1.3.3中,.live()方法将可以像bind(type,[data],fn)方法一样支持预设参数功能。(其中[data]:(可选)Object作为event.data属性值传递给事件对象的额外数据对象)。以下是使用此功能后的代码: -
- var eventConfig = {
- selectedClass: "selected"
- };
-
- $("li").live("click", eventConfig, function( event ) {
-
- var selectedClass = event.data.selectedClass;
-
-
- $(this).addClass( selectedClass )
- .siblings().removeClass( selectedClass );
- });
一个字-爽! 三、增强了.toggleClass()方法: 在jQuery 1.3.3中,toggleClass()方法将提供更丰富的操作模式。目前的jQuery1.3.2中,toggleClass()方法在一个时间上只能切换一个类,而新的toggleClass()方法将能够切换多个类,支持更广泛的参数设置。以下是不同方式的实例,看了就会使用:(Here are the different ways you’ll be able to use .toggleClass().靠!) -
-
-
-
- $('div').toggleClass();
- $('div').toggleClass();
- $('div').toggleClass( false );
- $('div').toggleClass( true );
-
-
- $('div').toggleClass( "a b" );
- $('div').toggleClass( "a c" );
- $('div').toggleClass( "a b c", false );
- $('div').toggleClass( "a b c", true );
总结如下(以下借鉴 Cloudream): 1.toggleClass也可以和addClass一样,用空格分隔多个class名称了。 - .toggleClass("a b") == .toggleClass("a").toggleClass("b")
2.无参数时,自动删除、恢复全部class,也可以传递一个布尔值,true为恢复class,false为删除class。 3.也可以第一个参数为class名,第二个参数为布尔值。 四、增强了.index()方法: 说实话这个方法没怎么用过~,先扫盲一下:index(subject)搜索与参数表示的对象匹配的元素,并返回相应元素的索引值。 如果找到了匹配的元素,从0开始返回;如果没有找到匹配的元素,返回-1。(注意,是匹配元素,不是字符,其实和其他筛选方法差不多,唯一不同就是返回索引数字)看不下去了,大体增加了2个功能。 1.可以传递选择对象作为参数: -
- $("img").index( $("img.selected") );
-
-
-
- $("img").index( ".selected" );
-
2.无参数传递,直接查找在同级元素中的位置: -
-
- var $this = $(".selected");
-
- $this.parent().children().index( $this );
-
-
-
- $(".selected").parent().index();
-
五、this: 以前jQuery在回调中始终作为this的值发送元素。jQuery 1.3.3新功能中,可以在bind/live绑定事件时,自行指定this参数代表的对象。可以看看以下示例代码: -
- var MyClass = function() {
-
- this.clicked = false;
- this.element = null;
- };
- MyClass.prototype.click = function( event ) {
-
-
-
-
-
-
-
- this.clicked = true;
-
-
- this.element = event.target;
-
-
- return false;
- };
-
-
- var myInstance = new MyClass();
-
-
-
- $("li").live("click", myInstance.click, myInstance);
正如你所看到的示例代码,实际上发生的事件仍然可以检索通过event.target或event.currentTarget属性来代替。(跨浏览器特性) 以上内容来借读于jQuery开发组的Brandon Aaron在博客上发表的部分文章!最后感谢下走在jQuery汉化前沿的朋友,期待jQuery 1.3.3中文文档的整理。 |