JS技术

jQuery 1.4实现15个新特性实例源码_Javascript教程(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-01 10:00 我要评论( )

复制内容到剪贴板代码:var app = { config: { clickMessage: 'Hi!' }, clickHandler: function() { alert(this.config.clickMessage); } }; 这个clickHandler方法,当像app.clickHandler()这样调用时, app就是其上

复制内容到剪贴板 代码: var app = {
    config: {
        clickMessage: 'Hi!'
    },
    clickHandler: function() {
        alert(this.config.clickMessage);
    }
};

这个  clickHandler  方法,当像  app.clickHandler()  这样调用时, app  就是其上下文,也就是说  this  关键字指向的是  app  。如果只需简单地调用,这样的写法没什么问题:

复制内容到剪贴板 代码: app.clickHandler(); // "Hi!" is alerted

不过如果把它当作一个事件处理器:

复制内容到剪贴板 代码: jQuery('a').bind('click', app.clickHandler);

当我们点击这个锚记时,并没有达到预想的效果(没东西 alert 出来)。这是因为 jQuery (以及大部分理智的事件模型),默认地,都会把处理器的上下文指定为目标元素本身。也就是说, this 所代表正是被点击的这个链接。而我们想的是, this  应该继续代表  app  。在jQuery 1.4中,实现这一目的十分简单:

复制内容到剪贴板 代码: jQuery('a').bind(
    'click',
    jQuery.proxy(app, 'clickHandler')
);

现在点击所有锚记都会弹出“Hi!”了。

代理函数把你的函数包裹一圈,同时把函数内的  this  设定为你想要东西。在其他上下文应用场景,如把回调函数传给其他 jQuery 方法或插件,代理函数也能派上用场。

了解更多  jQuery.proxy

7.  动画队列延迟

现在,可以给动画队列加一个延迟了。虽然这个功能可以在任何队列里实现,但最常用的可能还是延迟“fx 队列”("fx" queue,jQuery默认的动画队列)。它能让你在两个动画行为之间暂停一下,而不用牵扯到回调函数和  setTimeout  之类的东西。 .delay()  的第一个参数即你需要设定的延迟毫秒数:

复制内容到剪贴板 代码: jQuery('#foo')
    .slideDown() // Slide down
    .delay(200) // Do nothing for 200 ms
    .fadeIn(); // Fade in

如果你想延迟一个除 fx 以外的队列,把队列名作为第二个参数传给  .delay() 就可以了 。

详细了解  .delay(…)

8. 检测元素是否含有特定内容

jQuery 1.4 让检测一个元素(或集合)是否含有( .has() )某项东西更为容易。其背后的机理和选择过滤器  :has() 是一样的。这个方法会从当前集合中选出满足任意指定条件之一的元素。

复制内容到剪贴板 代码: jQuery('div').has('ul');

这条语句在所有DIV元素中挑出那些包含UL元素的。这种情况可能用选择过滤器  :has()  就好了,但当你要更程式化地过滤选择集时  .has()  方法就十分有用了。

jQuery 1.4 还在 jQuery 命名空间下新增了一个  contains   函数。这是一个比较底层的函数,接受两个 DOM 节点为参数。返回一个布尔值,指示第二个元素是否包含在第一个元素中。例如:

复制内容到剪贴板 代码: jQuery.contains(document.documentElement, document.body);
// 返回true - <body> 确实包含在 <html> 中

消息了解: .has(…) , jQuery.contains(…)

9. 给元素剥皮!

很早以前,jQuery 就可以用  .wrap()  给元素裹一层皮。现在, jQuery 1.4 添加了  .unwrap()  方法,用以剥皮。看下面的DOM结构:

复制内容到剪贴板 代码: <div>
    <p>Foo</p>
</div>

来把 p 元素外面的一层皮(div)剥掉:

复制内容到剪贴板 代码: jQuery('p').unwrap();

DOM 变成了:

复制内容到剪贴板 代码: <p>Foo</p>

总而言之,这个方法可以把任意元素的父元素移除。.

详细了解  .unwrap(…)

10. 移除元素,而不删除数据

以前有一个 .remove() 方法,是把元素剥离后抛弃。全新的  .detach() 方法可以让你把一个元素从DOM中剥离,而不丢失数据。囊括该元素的 jQuery 对象会在操作完成后还保留这个元素。数据可以通过  .data()   或者 jQuery 事件系统中的任意事件处理器传入 jQuery 对象。

当你需要把某个元素从DOM中移除,然后在将来某个场景中重新引入时,这个函数会很有用。元素的事件句柄和其他所有数据都会被保留。

复制内容到剪贴板 代码: var foo = jQuery('#foo');
// 绑定一个重要的事件处理器
foo.click(function(){
    alert('Foo!');
});
foo.detach(); // 从DOM中移除
// … do stuff
foo.appendTo('body'); // 重新加入到DOM
foo.click(); // 弹出alert信息: "Foo!"

详细了解  .detach(…)

11. index(…) 的功能增强

jQuery 1.4 为您使用  .index()  提供了两种新方法。以前,你必须把元素作为参数传给它,然后获得一个返回的数值,代表在当前集合中这个元素的索引。现在,如果不传参数过去,返回的值就代表某元素在其同辈中排行老几。比方说下面的DOM:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery如何实现标签内容的隐藏和显示_Javascript教程

    jQuery如何实现标签内容的隐藏和显示_Javascript教程

    2015-10-02 11:04

  • jQuery的基本知识_Javascript教程

    jQuery的基本知识_Javascript教程

    2015-10-01 13:20

  • jQuery核心方法的使用_Javascript教程

    jQuery核心方法的使用_Javascript教程

    2015-10-01 13:16

  • jQuery插件实现无限级别下拉菜单源码_Javascript教程

    jQuery插件实现无限级别下拉菜单源码_Javascript教程

    2015-10-01 10:19

网友点评