let命令的应用

先来看个例子:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>test</title>
</head>
<body>
<ul id="hd">
    <li>zero</li>
    <li>one</li>
    <li>two</li>
    <li>three</li>
    <li>four</li>
    <li>five</li>
</ul>
</body>
<script>
    var lis = document.getElementById("hd").getElementsByTagName("li");
     console.log(lis);
    for(var i = 0;i < lis.length; i ++){
        console.log(lis[i]);
        lis[i].onclick = function () {
            alert(i);
        }
    }
</script>
</html>





console.log(lis)会向控制台打印包含6个元素的数组,结果如下:

HTMLCollection(6) [li, li, li, li, li, li]

console.log(lis[i])会向控制台打印每一个元素,结果如下:

<li>zero</li>
<li>one</li>
<li>two</li>
<li>three</li>
<li>four</li>
<li>five</li>

上面代码执行完毕后点击每个li标签会弹出6,原因是在页面刷新完成后,for循环就完成了,然后点击li标签,触发onclick事件,弹出的是最后一次的i值。

解决方法一:给每个标签加属性,将每次循环的i值赋值给对应的标签属性,然后每次循环弹出对应的标签属性。

<script>
    var lis = document.getElementById("hd").getElementsByTagName("li");
    for(var i = 0;i < lis.length; i ++){
        lis[i].list = i;
        console.log(lis[i].list);
        lis[i].onclick = function () {
            alert(this.list);
        }
    }
</script>

解决方法二:使用let命令

<script>
    var lis = document.getElementById("hd").getElementsByTagName("li");
    for(let i = 0;i < lis.length; i ++){
        lis[i].onclick = function () {
            alert(i);
        }
    }
</script>

上面代码中,i只在本轮循环有效,每一次循环的i值其实都是一个新的变量。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值