jQuery 请指出'.bind()','.live()'和'.delegate()'的区别

时间:2023-03-09 14:42:51
jQuery 请指出'.bind()','.live()'和'.delegate()'的区别

http://kb.cnblogs.com/page/94469/
网上好多类似的

简言之bind可以绑定页面上已有的,live和delegate可以绑定到还未存在于页面中的元素之上。delegate又比live好一些

------------------------------------------------------------------------------------------------------------------------------------------
.bind()

  $('a').bind('click', function() { alert("That tickles!") });

  这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。

.live()

  $('a').live('click', function() { alert("That tickles!") });

  JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数。任何时候只要有事件冒泡到
document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a’这一CSS选择器是否匹配,如果都是的话,则执行函数。

  live方法还可以被绑定到具体的元素(或context)而不是document上,像这样:

  $('a', $('#container')[0]).live(...);

.delegate()
类似于live()  但是delegate方法仅需要查找并存储$(document)元素。
live函数也挺令人费解的。想想看,它被链到$(‘a’)对象集上,但其实际上是在$(document)对象上发生作用。由于这个原因,它能够
试图以一种吓死人的方式来把方法链到自身上。实际上,我想说的是,以$.live(‘a’,…)这一形式作为一种全局性的jQuery方法,live方法
会更具意义一些。

(貌似下面描述不正确  CSS选择器  测试用a 也是可以的)

  仅支持CSS选择器

  最后一点,live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作,这使得它变得非常的不灵活。

$("p").append("<a class='della' href='#'> Hello</a >");
    $('a').live('hover', function() {
      alert("Live handler called.");
    });

I am della  ,  I love SH