WPI第三天

98 阅读3分钟

环境对象:

环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。

作用:弄清楚this的指向,可以让我们代码更简洁。

函数的调用方式不同,this 指代的对象也不同

直接调用函数,其实相当于是 window.函数,所以 this 指代 window

【谁调用, this 就是谁】 是判断 this 指向的粗略规则

编程思想:(排他思想)

当前元素为A状态,其他元素为B状态

使用:

  1. 干掉所有人

使用for循环

  1. 复活他自己

通过this或者下标找到自己或者对应的元素

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        ul {
            list-style: none;
            display: flex;
            width: 500px;
            height: 200px;
            margin: 200px auto;
            border: 2px solid pink;
        }
        li {
            display: flex;
            flex: 1;
            font-size: 30px;
            align-items: center;
            justify-content: center;
        }
    </style>
</head>
<body>
    <ul>
        <li>冠希哥</li>
        <li></li>
        <li>彭于晏</li>
    </ul>
    <script>
        // 先获取到每一个li标签
        // 再li标签绑定点击事件

        // 写处理其他所有的元素 让让他们的背景颜色都变成白色
        // 事件触发 设置 被点击的li标签 选中的样式

        // let liList = document.querySelectorAll('li');
        // for (let index = 0; index < liList.length; index++) {
        //   liList[index].addEventListener('click', function () {
        //     // 给被点击的li标签加上选中样式
        //     // liList[index].style.backgroundColor = 'red';
        //     // 先设置每一个li标签的背景颜色 成 白色
        //     for (let j = 0; j < liList.length; j++) {
        //       liList[j].style.backgroundColor = '#fff';
        //     }
        //     // 再单独设置 被点击的li标签  变成红色
        //     this.style.backgroundColor = 'red';
        //   });
        // }
        let li = document.querySelectorAll('li');

        for (let index = 0; index < li.length; index++) {
            // 设置所有的li标签 背景颜色为白色
            li[index].addEventListener('click',function () {
                srtAllLiColor();
                // 设置被点击的li标签 为红色
                this.style.backgroundColor = 'red';
                function srtAllLiColor() {
                    for (let i = 0; i < li.length; i++) {
                        li[i].style.backgroundColor = '#fff'
                    }
                }
            })
        }
    </script>
</body>
</html>

节点:

DOM节点:DOM树里每一个内容都称之为节点

节点类型:元素节点;属性节点;文本节点

元素节点:所有标签:body、div、head、a 等等【html是根节点

属性节点:所有的属性:href、class、id等等

文本节点:所有的文本

节点关系:父节点、子节点、兄弟节点

父节点查找: parentNode 属性;返回最近一级的父节点 找不到返回为null

子元素.parentNode

关闭二维码案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no" />
    <title>09-二维码-点击关闭.html</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div>
        1
        <img class="close-btn" src="./images/2.png" alt="" />
        <img src="./images/1.png" alt="" />
    </div>
    <div>
        2
        <img class="close-btn" src="./images/2.png" alt="" />
        <img src="./images/1.png" alt="" />
    </div>
    <div>
        3
        <img class="close-btn" src="./images/2.png" alt="" />
        <img src="./images/1.png" alt="" />
    </div>
    <div>
        4
        <img class="close-btn" src="./images/2.png" alt="" />
        <img src="./images/1.png" alt="" />
    </div>
    <script>
        /* 
  1 先处理好静态结构
  2 先获取到关闭按钮 数组 
  3 遍历数组 给关闭按钮 绑定 点击事件
  4 事件触发了 
        通过  this 获取到 对应的父元素  隐藏
   */

        let closeBtns = document.querySelectorAll('.close-btn');

        // 遍历
        for (let index = 0; index < closeBtns.length; index++) {
            closeBtns[index].addEventListener('click', function () {
                // this 获取到 对应的父元素  隐藏
                // this.parentNode.style.display = 'none';
                // 如果你们写代码的时候也想我一样 没有代码提示
                // 如 像老师一样 手敲每一个字母
                // 真记不住
                // document.parentNode
                // document.body.style.display="none";
                // document.parentNode
                // document.body.style.display="none";
                this.parentNode.style.display = 'none';
            });
        }
    </script>
</body>
</html>

子节点查找:

childNodes

获得所有子节点、包括文本节点(空格、换行)、注释节点等

children(重点):仅获得所有元素节点;返回的还是一个伪数组

父元素.children

兄弟关系查找:

上一个兄弟节点:previousElementSibling 属性

下一个兄弟节点 :nextElementSibling 属性

(创建节点)增加节点:

很多情况下,我们需要在页面中增加元素,比如,点击发布按钮,可以新增一条信息。

一般情况下,我们新增节点,按照如下操作:

创建一个新的节点,把创建的新的节点放入到指定的元素内部。

1.创建节点:即创造出一个新的网页元素,再添加到网页内,一般先创建节点,然后插入节点

创建方法:document.createElement('标签名')

2.追加节点:要想在界面看到,还得插入到某个父元素中。(这里有两种插入方法)

插入到父元素中某个子元素的前面:

父元素.insertBefore ( 要插入的元素,在那个元素前面 )

插入到父元素的最后一个子元素:

父元素.appendChild ( 要插入的元素 )

克隆节点:

cloneNode会克隆出一个跟原标签一样的元素,括号内传入布尔值

若为true,则代表克隆时会包含后代节点一起克隆--深拷贝

若为false,则代表克隆时不包含后代节点--浅拷贝

默认为false

删除节点 :

若一个节点在页面中已不需要时,可以删除它

在 JavaScript 原生DOM操作中,要删除元素必须通过父元素删除

语法:父元素.removeChild ( 要删除的元素 )

注:如不存在父子关系则删除不成功

删除节点和隐藏节点(display:none) 有区别的: 隐藏节点还是存在的,但是删除,则从html中删除节点

小案例:剪切移动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no" />
    <title>14-剪切-移动.html</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            display: flex;
            justify-content: space-between;
            padding: 100px;
        }
        ul {
            width: 300px;
        }
        .left {
            background-color: yellow;
        }
        .right {
            background-color: blueviolet;
        }
    </style>
</head>
<body>
    <ul class="left">
        <li>冠希</li>
        <li>彦祖</li>
        <li></li>
        <li>胡歌</li>
        <li>周星驰</li>
    </ul>
    <ul class="right"></ul>
    <script>
        let li = document.querySelectorAll('li');

        let rightUl = document.querySelector('.right');

        for (let index = 0; index < li.length; index++) {
            li[index].addEventListener('click',function() {
                rightUl.appendChild(this);
            })
        }
    </script>
</body>
</html>

案例:【Tab栏切换 等等...】别多想什么!案例敲,不懂就问

努力才可能会有回报!不努力?拜托!是真的没有!!