li标签绑定事件比如有1000个li标签需要点击,显示对应li标签的内容,有什么高效的方法

关于在前端面试中,经常会被技术人员问道在ul标签中有一组li标签,你如何点击每个li并显示相应的内容,最初我的想法是用for循环给每个li添加click事件,然而产生了闭包的效果,为了解决这个问题,我又对代码进行了下面的更改。

<ul>

<li>1</li>

<li>2</li>

<li>3</li>

<li>4</li>

</ul>

<scripttype="text/javascript">

var li=document.getElementsByTagName("li");

for(var i=0;i<li.length;i++){

(function(x){

li[x].οnclick=function(){

alert(x);

}

})(i);

}

</script>

这样就很好的解决闭包带来的效应,不过这样效率并不是最高的,如果有1000个li标签,难道还要循环个1000遍,这样肯定不行所以利用事件冒泡特性提高效率。主要是利用事件代理。

事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。

event.target 属性可以用来实现事件委托 (event delegation)。

1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。

也就是:利用冒泡的原理,把事件加到父级上,触发执行效果。

好处呢:1,提高性能。

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>事件委托</title>
</head>
<body>
<div>
<ul id="ulItem">
<li id="li1">1</li>
<li id="li2">2</li>
<li id="li3">3</li>
<li id="li4">4</li>
<li id="li5">5</li>
<li id="li6">6</li>
<li id="li7">7</li>
<li id="li8">8</li>
<li id="li9">9</li>
<li id="li10">10</li>
</ul>
</div>
<script type="text/javascript"> 
var ulItem = document.getElementById("ulItem");
ulItem.onclick = function(e){
e = e || window.event;//这一行及下一行是为兼容IE8及以下版本
var target = e.target || e.srcElement;
if(target.tagName.toLowerCase() === "li"){
alert(target.innerHTML);
}
}
</script> 
</body>
</html>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值