您的位置:首页 > 其它

利用事件委托解决大量循环重复的事件。

2015-10-28 21:53 183 查看
假设有个ul,它下面有5000个li;

需求是给这5000个li添加一个点击事件,;

有些人会去这样做

var oUl = document.getElementById('oUl');
var aLi = oUl.getElementsByTagName('li');
var len = aLi.length;
for(var i =0;i<len;i++){
(function(index){
aLi[i].onclick = function(){
fn()
};
})(i)

}


这样做的弊端显而易见,遍历的基数越大,性能开销越大。

因此正确的做法应该是这样

var oUl = document.getElementById('oUl');
oUl.onclick = function(ev){
var oEv = ev || event;
var oSrc = oEv.srcElement || oEv.target;
if(oSrc.tagName=='li'){
fn();
}
}


利用时间冒泡的特性进行事件委托。避免了大量的循环遍历,减少了性能开销。

jQuery下可以利用on添加事件的方法达到同样的效果;

var $ul = $('ul');
$ul.on('click','li',function(){
fn();
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: