- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
jQuery中的.bind()、.live()和.delegate()之间区别分析作者: 字体:[增加减小] 类型:转载 jQuery中的.bind()、.live()和.delegate()之间区别分析,学习jquery的朋友可以参考下。DOM树首先,可视化一个HMTL文档的DOM树是很有帮助的。一个简单的HTML页面看起来就像是这个样子:事件冒泡(又称事件传播)当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行。复制代码 代码如下:$(a).bind(click,function(){alert(that tickles!)}) 因此一个单击操作会触发alert函数的执行。click事件接着会向树的根方向传播,广播到父元素,然后接着是每个祖先元素,只要是它的某个后代元素上的单击事件被触发,事件就会传给它。在操纵DOM的语境中,document是根节点。现在我们可以较容易地说明.bind()、.live()和.delegate()的不同之处了。.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(click,function(){alert(That tickles!)}).delegate() 复制代码 代码如下:$(#container).delegate(a,click,function(){alert(That tickles!)})JQuery扫描文档查找$(#container),并使用click事件和a这一CSS选择器作为参数把alert函数绑定到$(#container)上。任何时候只要有事件冒泡到$(#container)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CSS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。 可以注意到,这一过程与.live()类似,但是其把处理程序绑定到具体的元素而非document这一根上。精明的JSer们可能会做出这样的结论,即$(a).live() == $(document).delegate(a),是这样吗?嗯,不,不完全是。 为什么.delegate()要比.live()好用 基于几个原因,人们通常更愿意选用jQuery的delegate方法而不是live方法。考虑下面的例子: 复制代码 代码如下:$(a).live(click, function() { blah() }); 或 $(document).delegate(a, click, function() { blah() }); 后者实际上要快过前者,因为前者首先要扫描整个的文档查找所有的$(‘a)元素,把它们存成jQuery对象。尽管live函数仅需要把a作为串参数传递以用做之后的判断,但是$()函数并未“知道”被链接的方法将会是.live()。 而另一方面,delegate方法仅需要查找并存储$(document)元素。 一种寻求避开这一问题的方法是调用在$(document).ready()之外绑定的live,这样它就会立即执行。在这种方式下,其会在DOM获得填充之前运行,因此就不会查找元素或是创建jQuery对象了。 灵活性和链能力live函数也挺令人费解的。想想看,它被链到$(‘a)对象集上,但其实际上是在$(document)对象上发生作用。由于这个原因,它能够试图以一种吓死人的方式来把方法链到自身上。实际上,我想说的是,以$.live(‘a,…)这一形式作为一种全局性的jQuery方法,live方法会更具意义一些。仅支持CSS选择器最后一点,live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作,这使得它变得非常的不灵活。欲了解更多关于CSS选择器的缺点,请参阅Exploring jQuery .live() and .die()
原创力文档


文档评论(0)