老师看看前面对不对,最后删除只能删新建的一个。

老师看看前面对不对,最后删除只能删新建的一个。

我在制作过程中,lis.length+=1就报错,换成len=lis.length; len+=1就过去了,为什么呢?

前面循环for里定义过一次 lis.length  后面for还需要再定义吗,能直接引用吗?直接引用我发现删除后再创建它就按原来的数字增加,应该是上面后下面的length不是一个数字。

<!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 but1=document.getElementById("btnAdd");

    var but2=document.getElementById("btnRemove");

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

    var ul=document.getElementById("list");

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

    lis[i].onmouseover=function(){

      this.style.backgroundColor="purple"}

    lis[i].onmouseout=function(){

      this.style.backgroundColor="#FF6633"}

    };


    but1.onclick=function(){

     li=document.createElement("li");

     var len=lis.length;

     len+=1;

        for(var i=0;i<len;i++){      

        txt=document.createTextNode("我是li"+[(i+1)]);

        

      }li.appendChild(txt);

      ul.appendChild(li); 

     but2.onclick=function(){

      

      ul.removeChild(li)

      }

     }

        

     


    </script>

</body>


</html>


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

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

2回答
好帮手慕夭夭 2020-03-24 14:58:34

同学你好,这是因为事件在页面打开时不会自动执行,而for循环会自动执行且很快执行完毕,i=3时,不符合循环条件退出循环。当我们触发点击事件时,拿到的永远是3,所以会报错。

祝学习愉快 ~

好帮手慕夭夭 2020-03-24 10:03:24

同学你好,问题解答如下:

1.是改成如下会报错吗?这样并没报错,且这样改lis.length+=1没有任何意义,是一句多余的代码。如果不是这样做的,建议详细描述一下。

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

2.可以使用。因为第一个for循环没有放在事件中,页面打开时,它获取到的长度为3。点击事件执行,只会执行事件中的代码,事件外部的代码是不会执行的,所以len的值一直是3,除非在事件中改变。

3.因为删除的是变量li,每一次点击事件触发时,只会创建一个li,即变量li值永远是最后一个li。所以也只能删除一个li。

综上所述,建议如下修改:

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

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 精慕门2504353 #1
    谢谢老师解答,我在做背景色更换时候,lis[i].onmouseout=function(){this.style.backgroundColor="#ff3366"}; 发现如果 函数里 this 换成 lis[i]就不显示,这里this不是和lis[i]一样嘛?
    2020-03-24 13:37:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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