老师好!这里面的this为什么,不能换成lis[i];

老师好!这里面的this为什么,不能换成lis[i];

<!DOCTYPE html>

<html>


<head>

    <title></title>

    <style type="text/css">

    html,

    body {

        margin: 0;

        padding: 0;

    }


    div:not(:nth-of-type(2)) {

        width: 500px;

        height: 100%;

        background-color: #a0e4ff;

        margin: 0 auto;

    }

    /*ul默认有外边距*/


    ul {

        width: 300px;

        height: 100%;

        background-color: #ecc7ea;

        list-style: none;

        /*清除默认边距*/

        margin: 0;

        padding: 0;

        margin: 20px auto;

        margin-bottom: 30px;

    }


    li {

        width: 200px;

        height: 30px;

        line-height: 30px;

        margin: 30px auto;

        background-color: #cdffc0;

    }

    </style>

</head>


<body>

    <div id="box">

        <button id="btnAdd">添加元素</button>

        <button id="btnRemove">删除元素</button>

        <ul id="list">我是ul

            <li>我是li1</li>

            <li>我是li2</li>

            <li>我是li3</li>

        </ul>

    </div>

    <script type="text/javascript">

    //此处填写代码

        var Asd=document.getElementById("btnAdd"),

            rem=document.getElementById("btnRemove"),

            ul=document.getElementById("list"),

            lis=ul.getElementsByTagName("li");

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

              lis[i].onmouseover=function(){

                this.style.backgroundColor="#00f";//问题在此处老师!!!!!

              }

              lis[i].onmouseout=function(){

                this.style.backgroundColor="#cdffc0";//问题在此处老师!!!!!换了浏览器就报错

              }

        }

        Asd.onclick=function(){

            var li=document.createElement("li"),

                text=document.createTextNode("我是li"+(lis.length+1));

            li.appendChild(text);

              li.onmouseover=function(){

                this.style.backgroundColor="#00f";

              }

              li.onmouseout=function(){

                this.style.backgroundColor="#cdffc0";

              }

            var fam=document.createDocumentFragment();

            fam.appendChild(li);

            ul.appendChild(fam);

        }

        rem.onclick=function(){

          if(ul.children.length>0){

            ul.removeChild(ul.children[ul.children.length-1]);

          }

        }

    </script>

</body>


</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕夭夭 2019-09-05 18:58:47

你好同学,解答如下:

1. 当打开页面的时候,代码顺序执行,for循环就已经执行了。当i=3,不符合循环条件,就会跳出循环继续执行下面的代码。注意,这是页面打开的时候就已经执行过的,此时i=3

2.而事件是需要触发才会执行的。当你移入元素触发onmouseover的时候,i=3 ,  lis[i]获取的是索引为3的li,但是页面中没有索引为3的li,就会报错哦。

你可以输出一下i值:

http://img1.sycdn.imooc.com//climg/5d70e9fb0001bdbe04460158.jpg

输出的是3:

http://img1.sycdn.imooc.com//climg/5d70ea120001001302580084.jpg

所以移入和移出事件不能直接使用 lis[i]哦。

代码效果实现正确,继续加油。祝学习愉快,望采纳。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师