老师,为什么这段代码可以实现添加删除,但是不能实现样式改变,能帮我看下吗?

老师,为什么这段代码可以实现添加删除,但是不能实现样式改变,能帮我看下吗?


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

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

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

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

        var childs = uls.children[i];

        childs.onmouseover = function () {

            childs.style.backgroundColor = "lightblue";

        }

        childs.onmouseout = function () {

            childs.style.backgroundColor = "pink";

        }

    }

    

    btn1.onclick = function () {

        var ali = document.createElement("li");

        var counts = uls.childElementCount;

        ali.innerHTML = "我是li"+(counts+1);

        uls.appendChild(ali);

    };

    btn2.onclick = function () {

        uls.removeChild(uls.lastElementChild);

    };

    </script>

</body>


</html>


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

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

2回答
好帮手慕夭夭 2019-07-10 13:51:58

你好同学,它们本身就是一个概念里面产生的,可以这样理解:

一个html页面可以看成一个DOM树结构 , 而html中的元素 ,属性或者文本,注释等像树枝和树叶一样 ,是组成DOM树的基础节点(node节点)。

页面中的标签元素(例如div,p,这些页面中的标签),使用document.getElementById()方法获取返回的就是一个DOM对象。而使用getElementsByName()和getElementsByTagName()获取的元素,才是同学说的返回一个节点集合(Nodelist)。

而父兄链与返回的是DOM对象还是节点集合没有关系,一个元素有没有兄弟元素和父元素是根据页面结构来说的,例如一个div嵌套一个div,那么里面的div节点就有父元素。

祝学习愉快,望采纳。

好帮手慕夭夭 2019-07-09 11:10:15

你好同学,设置因为 document.getElementById("list");获取的就是一个DOM对象,不是一个集合。dom对象使用 uls.length返回的是undefined,所以逻辑不对哦

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

改为如下:

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

祝学习愉快,望采纳。

  • 提问者 Marcuse #1
    那能否再问一下老师,DOM概念和Node概念有什么区别,document.getElementById(list)不也是获取一个Nodelist吗?因为课程中有讲到Node的父子链和兄弟链,一直不是很明白。
    2019-07-09 19:34:33
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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