事件委托
例如有一个文章列表:
<ul> class="arcList" <li><a href="#">#1</a></li> <li><a href="##">#2</a></li> <li><a href="###">#3</a></li> <li><a href="####">#4</a></li> <li><a href="#####">#5</a></li> </ul>
我们想要在点击每一个a
标签的时候,执行某一动作,普通做法是直接给a标签添加事件:
$(".arcList a").on("click",function(){ alert($(this).html()); });
这样,点击每一个a时,会弹出内部的html
但是,这样会遍历每一个a
标签,效率不是很高,所以就有事件委托的出现。
在这个例子中,我们可以把事件加给ul
,但是当点击对象是a
的时候才起作用,这样,就不需要遍历所有a
节点了。
jQuery中的事件委托
.delegate()
早在jQuery 1.4里就加入了.delegate()
这一事件委托的方法,上面的列表,我们可以改写成:
$(".arcList").delegate("a","click",function(){ alert($(this).html()); });
即给ul.arcList
加事件,但事件目标却是里面的a
,查看Demo。
.on()
jQuery 1.7
版本新加了万能的on()
方法,这个方法也有事件委托的写法:
$(".arcList").on("click","a",function(){ alert($(this).html()); });
即在事件类型后面传入事件的目标对象选择器,查看Demo。
不错的文章,内容气势磅礴.禁止此消息:nolinkok@163.com