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

来源:11-2 编程练习

Marcuse

2019-07-09 00:37:09


<!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>


写回答

2回答

好帮手慕夭夭

2019-07-09

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

http://img.mukewang.com/climg/5d24038800012e0c06750401.jpg

改为如下:

http://img.mukewang.com/climg/5d2405920001d72510550520.jpg

祝学习愉快,望采纳。

1
harcuse
h 那能否再问一下老师,DOM概念和Node概念有什么区别,document.getElementById(list)不也是获取一个Nodelist吗?因为课程中有讲到Node的父子链和兄弟链,一直不是很明白。
h019-07-09
共1条回复

好帮手慕夭夭

2019-07-10

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

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

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

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

祝学习愉快,望采纳。

0

0 学习 · 40143 问题

查看课程