这里this的位置,为什么不能用lis[i] ,必须用this吗?
# 具体遇到的问题
这里this的位置,为什么不能用lis[i] 。不是可以直接用DOM对象操作style属性吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul id="list">
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
<li>列表项</li>
</ul>
<script>
var oList = document.getElementById('list');
var lis = oList.getElementsByTagName('li');
// 书写循环语句,批量给元素添加监听
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function () {
// 在这个函数中,this表示点击的这个元素,this涉及函数上下文的相关知识,我们在“面向对象”课程中介绍
this.style.color = 'red';
};
}
</script>
正在回答
同学你好,以目前接触到的知识,是不能将this改为lis[i]的。this指向的是当前触发事件的元素,所以可以使用this。
循环执行的非常快,点击事件是在点击时才会触发,在点击事件里面使用i值,是循环之后的i值,在同学的代码中,获取的i值就是20,没有索引为20的li元素,所以是会报错的。
后面的课程中,会学习let,将var改为let,就可以把this改为lis[i]了,目前阶段,let可以作为一个了解,后期学习到的时候,再深入学习。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星