首先,可视化一个HMTL文档的DOM树是很有帮助的。一个简单的HTML页面看起来就像是这个样子:
事件冒泡(又称事件传播):当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行。利用事件传播(这里是冒泡)这个机制,就可以实现事件委托。具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。
一个单击操作会触发alert函数的执行。click事件接着会向树的根方向传播,广播到父元素,然后接着是每个祖先元素,只要是它的某个后代元素上的单击事件被触发,事件就会传给它,在操纵DOM的语境中,document是根节点。
现在我们再来说明.bind()、.live()和.delegate()的不同之处:
.bind()
这是最简单的绑定方法了。JQuery扫描文档找出所有的$('a')元素,并把alert函数绑定到每个元素的click事件上。注:其隐含意思,.bind()只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件。如果是Ajax过来的元素则无能为力,但是其胜在效率高
.live()
JQuery把alert函数绑定到$(document)元素上,并使用'click'和'a'作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与'a'这一CSS选择器是否匹配,如果都是的话,则执行函数。jQuery从1.4开始支持在使用.live()方法时配合使用一个上下文参数:
.delegate()
JQuery扫描文档查找$('#container'),并使用click事件和'a'这一CSS选择器作为参数把alert函数绑定到$('#container')上。任何时候只要有事件冒泡到$('#container')上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CSS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。(注:如果监听父控件被移除,其响应事件也会失效)可见,.delegate()方法是一个相对完美的解决方案。但在DOM结构简单的情况下,也可以使用.live()。
1、这句话是否正确?
不完全正确,
如上面的代码,后者实际上要快过前者,因为前者首先要扫描整个的文档查找所有的$(‘a')元素,把它们存成jQuery对象。尽管live函数仅需要把'a'作为串参数传递以用做之后的判断,但是$()函数并未“知道”被链接的方法将会是.live()。而另一方面,delegate方法仅需要查找并存储$(document)元素。一种解决的办法为,使用一种“早委托”的方式,如下:
在此,(function($){…})(jQuery)是一个“立即执行的匿名函数”,构成了一个闭包,可以防止命名冲突。在匿名函数内部,$参数引用jQuery对象。这个匿名函数不会等到DOM就绪就会执行。注意,使用这个hack时,脚本必须是在页面的head元素中执行的,意味着在$(document).reday()之外执行。之所以选择这个时机,因为这时候刚好document元素可用,而整个DOM还远未生成;如果把脚本放在结束的body标签前面,就没有意义了,因为那时候DOM已经完全可用了。
2、.live()相比.delegate()缺点有哪些?
一、$()函数会找到当前页面中选择器匹配元素并创建jQuery对象,但在确认事件目标时却不用这个元素集合,而是使用选择符表达式与event.target或其祖先元素进行比较,因而生成这个jQuery对象会造成不必要的开销;
二、默认把事件绑定到$(document)元素,如果DOM嵌套结构很深,事件冒泡通过大量祖先元素会导致性能损失;
三、只能放在直接选择的元素后面,不能在连缀的DOM遍历方法后面使用,即$(“#infotable td”).live…可以,但$(“#infotable”).find(“td”).live…不行;
四、收集选择器匹配元素并创建jQuery对象,但实际操作的却是$(document)对象,令人费解。
3、.live()真的绑定在document上面吗?
可以绝对的肯定。写一个样例,html代码为:
测试代码:
其测试结果为: ccc > aaa > bbb,和预期相符合
相关推荐
在我们日常开发中经常会使用到.bind()、.live()、.delegate()和.on(),有些同学会对这四者存在一些疑虑,所以下面这篇文章主要给大家介绍了关于Jquery中.bind()、.live()、.delegate()和.on()之间区别的相关资料,...
在讨论jQuery中的事件绑定方法时,.bind()、.live()和.delegate()是三种重要的技术。为了深入理解这些方法之间的区别和特点,首先需要对DOM事件的传播机制有所了解。在DOM事件模型中,事件传播分为捕获和冒泡两个...
例如,使用`.on()`替代`.bind()`, `.delegate()`, 和`.live()`可以减少内存占用并提高性能。另外,避免全局变量的使用,以及合理地组织和合并CSS选择器,都能提升页面运行效率。 在实际应用中,jQuery广泛应用于...
- **事件绑定的统一**:在1.7.1中,`.on()`方法取代了`.bind()`, `.live()`, 和 `.delegate()`,成为统一的事件绑定接口。`.on()`方法更强大,可以处理当前及未来的元素事件,增强了代码的灵活性。 - **新选择器**...
今天我们将深入探讨jQuery中的事件绑定方法,包括`bind()`, `live()`, `delegate()`,以及后来推出的`on()`方法。这四个方法都是为了帮助开发者更方便地管理页面上的事件,特别是对于动态生成的元素。 1. **bind()*...
其中,`$.fn.on()`方法的引入,取代了之前的`$.fn.bind()`, `$.fn.live()`, `$.fn.delegate()`,提供了一种统一且高效的方式来绑定事件。 7. **兼容性**:jQuery 1.7.2对老版本浏览器有着良好的支持,包括IE6/7/8等...
在探讨jQuery中的`bind()`, `delegate()`, 和`live()`事件绑定方法的区别时,我们需要深入理解它们在处理DOM事件时的独特方式。这些方法在不同的场景下提供了灵活且高效的选择,帮助开发者创建响应式和动态的Web应用...
例如,该版本引入了新的API,如`.on()`方法,它替代了之前的`.bind()`, `.live()`, 和 `.delegate()`,提供了更强大和灵活的事件处理。此外,1.7版本还对一些函数进行了优化,提高了性能,如`.data()`和`.attr()`。 ...
`$(selector).click(function() {...})`用于为元素绑定点击事件,`.bind()`、`.live()`(此版本已废弃)、`.delegate()`等方法则支持更复杂的事件处理需求。同时,`$(document).ready()`确保在页面加载完成后执行...
此外,jQuery 2.0.0还引入了一些新的API和改进,比如`.on()`方法替代了`.bind()`, `.live()`, 和 `.delegate()`,使得事件绑定更加灵活;`$.ajax()`方法的设置更加丰富,可以自定义更多请求选项;`.data()`方法的...
jQuery 1.7引入了`.on()`方法,取代了`.bind()`, `.live()`, 和 `.delegate()`,提供了更加灵活和高效的方式来绑定事件。1.83主要是一些bug修复和性能优化,确保稳定性和兼容性。 5. HTML(超文本标记语言): ...
3. **事件处理**: jQuery允许开发者使用`.bind()`, `.click()`, `.mouseover()`等方法绑定事件,同时提供`.trigger()`, `.live()`, `.delegate()`来触发和委托事件,这在1.3版本中已经被广泛应用。 4. **动画效果**...
`.bind()`, `.live()`, `.die()`等方法允许动态绑定和解绑事件,`.delegate()`和`.undelegate()`方法则为事件委托提供了便利,特别是对于动态生成的元素,这些方法可以确保事件的正确触发。 4. **动画效果**: ...
1. **事件绑定优化**:在jQuery 1.7中,`.on()`方法替代了`.bind()`, `.live()`, 和 `.delegate()`,提供了一种统一的事件处理方式。`.on()`不仅支持直接绑定事件,还能进行事件委托,提高了代码的可维护性。 2. **...
- **事件处理**:`$(selector).on()`是jQuery 1.7引入的新事件绑定方法,取代了`.bind()`, `.live()`, 和 `.delegate()`,支持动态生成元素的事件绑定。 - **动画效果**:`$.fn.animate()`用于创建自定义动画,而`...
$.on()方法取代了$.bind(), $.live() 和 $.delegate(),提供了一种统一的方式来绑定和处理事件。这个新方法不仅提高了代码的可读性和维护性,还增强了事件委托的能力,使得动态生成的元素也能响应事件,大大提高了...
1.7.1版本主要改进了性能,修复了一些已知问题,并引入了新的API,如`.on()`方法,它替代了之前的`.bind()`, `.live()`, 和 `.delegate()`,统一了事件绑定方式,提高了代码的可维护性。 再来看看`jquery-1.7.1.min...