随着DOM结构的复杂化和Ajax等动态脚本技术的运用致使现在的js界里最火热的一项技术应该是‘事件委托(event delegation)’了,什么是事件委托呢?小七给你娓娓道来,说白了就是想给子元素添加事件反而添加到父元素的身上,如今的你可能会说博主有病,放屁脱裤子画蛇添足,那么博主告诉你博主放屁是不脱裤子的,下面说下何时使用事件委,(1)考虑一个ul,在li的数量很是少的时候,为每个li添加事件固然不会存在太多性能方面的问题,可是当列表很是的长for循环太浪费内存,长到上百上千甚至上万的时候,为每一个li添加事件就会对页面性能产生很大的影响。(习惯用ul了,其余元素嵌套关系自行脑补)(2)给一个ul里面的几个li添加了事件可是若是动态又生成了li则刚生成的li不具有事件这时就须要用到委托。
使用委托的优势:本来须要给多个元素添加事件的如今只须要给他们的父元素添加事件,提升性能,提升可读性。
那么如今是否是有点了解了呢?废话很少说直接上图,高清无码的哦、
点击每个li都会触发事件alert出1。
HTML:
Jq代码不用委托:性能
Jq代码事件委托:
li就是子元素,jq委托的格式就是这样记住就行,固然on能够用bind,live,delegate.然而为何小七没用呢天然是有缘由的。
jQuery 1.3以前使用.bind()实现委托给他已经存在的子元素绑定事件,但不能给将来新增的元素绑定事件
为了突破单一.bind()方法的局限性jQuery 1.3使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即$(“ul”").live...能够,但$("body").find("ul").live...不行;
后来,为解决“事件传播链”过长的问题, jQuery 1.4.2干脆直接引入了一个新方法.delegate()。
根据jQuery 1.7 Beta 1的发版说明,jQuery 1.7为了解决.bind()、.live()和.delegate()并存形成的不一致性问题,将会增长一对新的事件方法:.on(),因此不用纠结用刀仍是用枪了之后直接用迫击炮(on()方法)
提示:使用事件委托时,若是注册到目标元素上的其余事件处理程序使用.stopPropagation()阻止了事件传播,那么事件委托就会失效。
spa