apis-day3dom节点操作

day3dom节点操作

1、节点操作

目标:掌握节点(标签)的增删改查、具备写微博发布案例的能力

1.1DOM节点

目标:能说出DOM节点的类型

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

节点类型

  • 元素节点:所有的标签,比如body、div
  • 属性节点:所有的属性,比如href
  • 文本节点:所有的文本
  • 其他
    在这里插入图片描述

1.2查找节点

目标:能够具备根据节点关系查找目标节点的能力

节点关系:

  • 父节点
  • 子节点
  • 兄弟节点

父节点查找:

parentNode属性(返回最近一级的父级点,找不到返回null)

//子元素.parentNode

子节点查找:

  • childNodes(获得所有子节点,包括文本节点【空格、换行】、注释节点等)
  • children(重点)(仅获得所有元素节点,返回的还是一个伪数组)
//父元素.children

兄弟关系查找:

  • nextElenmentSibling(下一个兄弟节点)
  • previousElementSibing(上一个兄弟节点)

1.3增加节点

目标:能够具备根据需求新增节点的能力

新增节点一般操作步骤:

  • 1.创建一个新的节点
  • 2.把创建的新的节点放入到指定的元素内部

总结:创建节点、追加节点

//创建一个新的元素节点
//document.createElement('标签名')

要想在界面看到,还得插入到某个父元素中

//插入到这个父元素的最后
//父元素.appendChild(要插入的元素)

//插入到某个子元素的前面
//父元素.insertBefore(要插入的元素,在哪个元素前面)

新增节点特殊情况:

  • 复制一个原有的节点
  • 把复制的节点放到指定元素内部
//克隆一个已有的元素节点
//元素.cloneNode(布尔值)

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

  • 若为true,则代表克隆时会包含后代节点一起克隆
  • 若为false,则代表克隆时不包含后代节点
  • 默认为false

1.4删除节点**

目标:能够具备根据需求删除节点的能力

  • 若一个节点在页面中已不需要时,可以删除它
  • 在 JavaScript 原生DOM操作中,要删除元素必须通过父元素删除
//父元素.removeChild(要删除的元素)

如不存在父子关系则删除不成功;删除节点和隐藏节点(display:none) 有区别的: 隐藏节点还是存在的,但是删除,则从html中删除节点

2、时间对象

目标:掌握时间对象,可以让网页显示时间

  • 时间对象:用来表示时间的对象
  • 作用:可以得到当前系统时间

路径:

1.实例化

2.时间对象方法

3.时间戳

2.1实例化

目标:能够实例化时间对象

  • 在代码中发现了 new 关键字时,一般将这个操作称为实例化
  • 创建一个时间对象并获取时间

获得当前时间

let date = new Date()

获得指定时间

let date = new Date('1949-10-01')

2.2 时间对象方法

目标:能够使用时间对象中的方法写出常见日期

因为时间对象返回的数据我们不能直接使用,所以需要转换为实际开发中常用的格式

方法作用说明
getFullYear()获得年份获取四位年份
getMonth()获得月份取值为0-11
getDate()获取月份中的每一天不同月份取值也不相同
getDay()获取星期取值为0-6
getHours()获取小时取值为0-23
getMinutes()获取分钟取值为0-59
getSeconds()获取秒取值为0-59

案例:

<!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>
        div {
            width: 300px;
            height: 50px;
            background-color: pink;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>

<body>
    <div></div>
    <script>
        // 先调用,省去一秒的空窗期
    getTime()
    function getTime() { 
            // 1.实例化时间对象
            let date = new Date()
            let year = date.getFullYear()
            let month = date.getMonth()
            let date1 = date.getDate()
            let day = date.getDay()
            let hour = date.getHours()
            let min = date.getMinutes()
            let sec = date.getSeconds()
            let div = document.querySelector('div')
            let arr = ['日', '一', '二', '三', '四', '五', '六']
            div.innerHTML = `今天是:${year}${month}${date1} ${hour}:${min}:${sec} 星期${arr[day]}`
        }
    setInterval(getTime, 1000)

    </script>
</body>

</html>

2.3时间戳

目标:能够获得当前时间戳

什么是时间戳

  • 是指1970年01月01日00时00分00秒起至现在的毫秒数,它是一种特殊的计量时间的方式

三种方式获取时间戳

1.使用 getTime() 方法

//1.实例化
let date = new Date()
//2.获取时间戳
console.log(date.getTime())

2.简写+new Date()--------记住这个

console.log(+new Date())

3.使用Date().new()

console.log(Date.now())

无需实例化

但是只能得到当前的时间戳, 而前面两种可以返回指定时间的时间戳

案例:下班倒计时

<!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>
        .countdown {
            width: 240px;
            height: 305px;
            text-align: center;
            line-height: 1;
            color: #fff;
            background-color: brown;
            /* background-size: 240px; */
            /* float: left; */
            overflow: hidden;
        }

        .countdown .next {
            font-size: 16px;
            margin: 25px 0 14px;
        }

        .countdown .title {
            font-size: 33px;
        }

        .countdown .tips {
            margin-top: 80px;
            font-size: 23px;
        }

        .countdown small {
            font-size: 17px;
        }

        .countdown .clock {
            width: 142px;
            margin: 18px auto 0;
            overflow: hidden;
        }

        .countdown .clock span,
        .countdown .clock i {
            display: block;
            text-align: center;
            line-height: 34px;
            font-size: 23px;
            float: left;
        }

        .countdown .clock span {
            width: 34px;
            height: 34px;
            border-radius: 2px;
            background-color: #303430;
        }

        .countdown .clock i {
            width: 20px;
            font-style: normal;
        }
    </style>
</head>

<body>
    <div class="countdown">
        <p class="next">今天是2022年11月12日</p>
        <p class="title">下班倒计时</p>
        <p class="clock">
            <span id="hour">00</span>
            <i>:</i>
            <span id="minutes">25</span>
            <i>:</i>
            <span id="scond">20</span>
        </p>
        <p class="tips">
            现在是18:30:00
        </p>
    </div>
    <script>
        let hour = document.querySelector('#hour')
        let minutes = document.querySelector('#minutes')
        let scond = document.querySelector('#scond')
        timer()
        setInterval(timer, 1000)
        function timer() {
            // 1.得到现在的时间戳
            let now = +new Date()
            //2.得到指定时间的时间戳
            let last = +new Date('2022-11-13 16:00:00')
            //3.(计算剩余的毫秒数)
            let count = (last - now) / 1000
            //转换为时分秒
            let h = parseInt(count / 60 / 60 % 24)
            // 补0的做法
            h = h < 10 ? '0' + h : h
            let m = parseInt(count / 60 % 60)
            m = m < 10 ? '0' + m : m
            let s = parseInt(count % 60)
            s = s < 10 ? '0' + s : s
            // console.log(h, m, s)
            hour.innerHTML = h
            minutes.innerHTML = m
            scond.innerHTML = s
        }


    </script>
</body>

</html>

3、综合案例

发布微博案例

需求1

  1. 注册input事件

  2. 将文本的内容的长度赋值给对应的数值

  3. 表单的maxlength属性可以直接限制在200个数之间

需求2

  1. 克隆预定义好的模板,将模板的hidden属性设置为false, 并最终展示到页面上
  2. 判断如果内容为空,则提示不能输入为空, 并且直接return
  3. 防止输入无意义空格, 使用字符串.trim()去掉首尾空格, 并将表单的value值设置为空字符串

需求3

  1. 获取文本域的内容, 赋值给由模板克隆出来的新标签里面的content.innerText
  2. 随机获取数据数组里面的内容, 替换newNode的图片和名称
  3. 利用时间对象将时间动态化 new Date().toLocaleString()

需求4

  1. 在事件处理函数里面获取点击按钮,注册点击事件(易错点: 必须在事件里面获取,外面获取不到)
  2. 删除对应的元素 (通过this获取对应的那条需要删除的元素)

需求5

  1. 将表单域内容重置为空
  2. 将userCount里面的内容重置为0
<!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>微博发布</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .w {
            width: 900px;
            margin: 0 auto;
        }

        .controls textarea {
            width: 878px;
            height: 100px;
            resize: none;
            border-radius: 10px;
            outline: none;
            padding-left: 20px;
            padding-top: 10px;
            font-size: 18px;
        }

        .controls {
            overflow: hidden;
        }

        .controls div {
            float: right;
        }

        .controls div span {
            color: #666;
        }

        .controls div .useCount {
            color: red;
        }

        .controls div button {
            width: 100px;
            outline: none;
            border: none;
            background: rgb(0, 132, 255);
            height: 30px;
            cursor: pointer;
            color: #fff;
            font: bold 14px '宋体';
            transition: all 0.5s;
        }

        .controls div button:hover {
            background: rgb(0, 225, 255);
        }

        .controls div button:disabled {
            background: rgba(0, 225, 255, 0.5);
        }

        .contentList {
            margin-top: 50px;
        }

        .contentList li {
            padding: 20px 0;
            border-bottom: 1px dashed #ccc;
            position: relative;
        }

        .contentList li .info {
            position: relative;
        }

        .contentList li .info span {
            position: absolute;
            top: 15px;
            left: 100px;
            font: bold 16px '宋体';
        }

        .contentList li .info p {
            position: absolute;
            top: 40px;
            left: 100px;
            color: #aaa;
            font-size: 12px;
        }

        .contentList img {
            width: 80px;
            border-radius: 50%;
        }

        .contentList li .content {
            padding-left: 100px;
            color: #666;
            word-break: break-all;
        }

        .contentList li .the_del {
            position: absolute;
            right: 0;
            top: 0;
            font-size: 28px;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div class="w">
        <!-- 操作的界面 -->
        <div class="controls">
            <img src="./images/9.6/tip.png" alt="" /><br />
            <!-- maxlength 可以用来限制表单输入的内容长度 -->
            <textarea placeholder="说点什么吧..." id="area" cols="30" rows="10" maxlength="200"></textarea>
            <div>
                <span class="useCount" id="useCount">0</span>
                <span>/</span>
                <span>200</span>
                <button id="send">发布</button>
            </div>
        </div>
        <!-- 微博内容列表 -->
        <div class="contentList">
            <ul id="list"></ul>
        </div>
    </div>

    <!-- 添加了hidden属性元素会直接隐藏掉 -->
    <li hidden>
       
    </li>
    <script>
        // maxlength 是一个表单属性, 作用是给表单设置一个最大长度

        // 模拟数据
        let dataArr = [
            { uname: '司马懿', imgSrc: './images/9.5/01.jpg' },
            { uname: '女娲', imgSrc: './images/9.5/02.jpg' },
            { uname: '百里守约', imgSrc: './images/9.5/03.jpg' },
            { uname: '亚瑟', imgSrc: './images/9.5/04.jpg' },
            { uname: '虞姬', imgSrc: './images/9.5/05.jpg' },
            { uname: '张良', imgSrc: './images/9.5/06.jpg' },
            { uname: '安其拉', imgSrc: './images/9.5/07.jpg' },
            { uname: '李白', imgSrc: './images/9.5/08.jpg' },
            { uname: '阿珂', imgSrc: './images/9.5/09.jpg' },
            { uname: '墨子', imgSrc: './images/9.5/10.jpg' },
            { uname: '鲁班', imgSrc: './images/9.5/11.jpg' },
            { uname: '嬴政', imgSrc: './images/9.5/12.jpg' },
            { uname: '孙膑', imgSrc: './images/9.5/13.jpg' },
            { uname: '周瑜', imgSrc: './images/9.5/14.jpg' },
            { uname: '老夫子', imgSrc: './images/9.5/15.jpg' },
            { uname: '狄仁杰', imgSrc: './images/9.5/16.jpg' },
            { uname: '扁鹊', imgSrc: './images/9.5/17.jpg' },
            { uname: '马可波罗', imgSrc: './images/9.5/18.jpg' },
            { uname: '露娜', imgSrc: './images/9.5/19.jpg' },
            { uname: '孙悟空', imgSrc: './images/9.5/20.jpg' },
            { uname: '黄忠', imgSrc: './images/9.5/21.jpg' },
            { uname: '百里玄策', imgSrc: './images/9.5/22.jpg' },
        ]

 // 需求1:检测用户输入字数
    //   1. 注册input事件
    //   2. 将文本的内容的长度赋值给对应的数值
    //   3. 表单的maxlength属性可以直接限制在200个数之间
    let textarea = document.querySelector('textarea')
    let useCount = document.querySelector('.useCount')
    // 发布按钮
    let send = document.querySelector('#send')
    // ul
    let ul = document.querySelector('#list')
    textarea.addEventListener('input', function () {
      // console.log(this.value.length)
      useCount.innerHTML = this.value.length
    })

    // 需求2: 输入不能为空
    //   点击button之后判断
    //   判断如果内容为空,则提示不能输入为空, 并且直接return 不能为空
    //   防止输入无意义空格, 使用字符串.trim()去掉首尾空格
    // console.log('  str')
    // console.log('  str '.trim())
    //   并将表单的value值设置为空字符串
    //   同时下面红色为设置为0
    send.addEventListener('click', function () {
      if (textarea.value.trim() === '') {
        //   并将表单的value值设置为空字符串
        textarea.value = ''
        //   同时下面红色为设置为0
        useCount.innerHTML = 0
        return alert('内容不能为空')
      }
      // 随机数
      function getRandom(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min
      }
      let random = getRandom(0, dataArr.length - 1)
      // 需求3:   新增留言  写到send 的里面
      // 创建一个小li,然后里面通过innerHTML追加数据
      let li = document.createElement('li')
      // 随机获取数据数组里面的内容, 替换newNode的图片和名字以及留言内容
      li.innerHTML = `
       <div class="info">
      <img class="userpic" src=${dataArr[random].imgSrc}>
      <span class="username">${dataArr[random].uname}</span>
      <p class="send-time"> ${new Date().toLocaleString()} </p>
      </div>
      <div class="content">${textarea.value}</div>
      <span class="the_del">X</span>
      `

      // 需求4:删除留言  放到追加的前面
      // 在事件处理函数里面获取点击按钮, 注册点击事件
      //   (易错点: 必须在事件里面获取, 外面获取不到)
      // 删除对应的元素(通过this获取对应的那条需要删除的元素)
      // 教你一招: 放到追加进ul的前面,这样创建元素的同时顺便绑定了事件,赞~~
      // 使用 li.querySelector()
      let del = li.querySelector('.the_del')
      del.addEventListener('click', function () {
        // 删除操作  点击的是X  删除的小li  父元素.removeChild(子元素)
        ul.removeChild(li)
      })
      // 利用时间对象将时间动态化       new Date().toLocaleString()
      // 追加给 ul  用  父元素.insertBefore(子元素, 那个元素的前面)
      ul.insertBefore(li, ul.children[0])
      // 需求5:重置
      // 将表单域内容重置为空
      // 将userCount里面的内容重置为0
      textarea.value = ''
      //   同时下面红色为设置为0
      useCount.innerHTML = 0
    })
    </script>
</body>

</html>

4、重绘和回流(重排)

回流(重排)

当 Render Tree 中部分或者全部元素的尺寸、结构、布局等发生改变时,浏览器就会重新渲染部分或全部文档的过

程称为 回流。

重绘

由于节点(元素)的样式的改变并不影响它在文档流中的位置和文档布局时(比如:color、background-color、

outline等), 称为重绘

重绘不一定引起回流,而回流一定会引起重绘。

会导致回流(重排)的操作:

  • 页面的首次刷新
  • 浏览器的窗口大小发生改变
  • 元素的大小或位置发生改变
  • 改变字体的大小
  • 内容的变化(如:input框的输入,图片的大小)
  • 激活css伪类 (如::hover)
  • 脚本操作DOM(添加或者删除可见的DOM元素)

简单理解影响到布局了,就会有回流

用 父元素.insertBefore(子元素, 那个元素的前面)
ul.insertBefore(li, ul.children[0])
// 需求5:重置
// 将表单域内容重置为空
// 将userCount里面的内容重置为0
textarea.value = ‘’
// 同时下面红色为设置为0
useCount.innerHTML = 0
})

```

4、重绘和回流(重排)

回流(重排)

当 Render Tree 中部分或者全部元素的尺寸、结构、布局等发生改变时,浏览器就会重新渲染部分或全部文档的过

程称为 回流。

重绘

由于节点(元素)的样式的改变并不影响它在文档流中的位置和文档布局时(比如:color、background-color、

outline等), 称为重绘

重绘不一定引起回流,而回流一定会引起重绘。

会导致回流(重排)的操作:

  • 页面的首次刷新
  • 浏览器的窗口大小发生改变
  • 元素的大小或位置发生改变
  • 改变字体的大小
  • 内容的变化(如:input框的输入,图片的大小)
  • 激活css伪类 (如::hover)
  • 脚本操作DOM(添加或者删除可见的DOM元素)

简单理解影响到布局了,就会有回流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: APIs IQ-FMEA软件使用手册是一个详细的说明文档,它向用户介绍了使用APIs IQ-FMEA软件的必要步骤和注意事项。 该手册包含了软件的安装、启动和配置过程的详细说明,同时详细介绍了软件的功能和操作界面。用户可以根据手册的指导,逐步了解软件的各项功能和操作方法,并能够快速地使用它来进行FMEA分析。 手册的主要内容包括:软件的基本界面和菜单栏介绍,FMEA分析的基本概念和步骤,创建FMEA项目的方法和注意事项,如何输入和管理FMEA数据,对FMEA数据进行分析和评估的方法,以及如何导出和分享FMEA分析结果等。 除此之外,手册还包括了一些常见问题的解答和故障排除方法,以便用户在使用软件时遇到问题时能够进行及时的解决和应对。 总之,APIs IQ-FMEA软件使用手册全面、系统地介绍了该软件的使用方法和注意事项,对于使用该软件进行FMEA分析的用户来说,具有非常重要的参考价值。 ### 回答2: APIs IQ-FMEA是一款风险分析软件,主要用于产品设计、生产和维护过程中的风险分析。软件使用手册主要介绍了APIs IQ-FMEA软件的安装、如何建立FMEA档案,如何填写FMEA,并对分析结果进行解释。 首先,用户需要正确安装APIs IQ-FMEA软件,并按照软件提供的流程和步骤建立FMEA档案。在建立FMEA档案之前,用户需要了解所分析的系统和产品的全貌,明确其特点、功能、原理和性能指标。FMEA档案建立好之后,用户需要按照FMEA表格的要求填写相应内容,包括零部件名称、功能要求、失效模式、失效后果、失效严重性等内容。针对各项分析指标,用户需要逐一填写,确保准确、完整。 在填写FMEA过程中,需要注意一些问题。例如,失效模式应尽可能地详尽和准确地描述,失效后果应根据实际情况分析,而非猜疑和臆测,失效严重性的分类与分值应根据相关标准和经验进行判定。此外,一定要对不确定的分析指标进行标识,确保再次分析和修正。 分析结束之后,用户可以根据得出的FMEA结果进行分析和解释。软件提供了多种图表和统计分析方法,可以帮助用户快速了解和评估分析结果。用户可以根据得到的结果进行相应的改进和优化,确保产品和系统的质量和可靠性。 总之,APIs IQ-FMEA是一款非常实用的风险分析软件,使用手册详细介绍了软件的使用流程和技巧,能够帮助用户更准确地进行风险分析和评估。在正式使用前,用户需要认真阅读和理解使用手册,并进行充分的培训和实践,以确保软件能够发挥最大的效益。 ### 回答3: APIs IQ-FMEA软件使用手册(中文)是一本非常重要的参考书籍,用于帮助用户了解如何使用该软件生成FMEA报告。该软件旨在帮助用户减少或消除产品或过程中可能出现的故障或缺陷,从而提高质量和可靠性,降低成本。 该软件使用手册涵盖了软件的全部功能。这包括创建FMEA的工作流程,FMEA的输出和分析,以及生成和管理FMEA报告的功能。在阅读完该手册后,用户将具备以下技能: 1. 使用软件创建FMEA:用户将学会如何使用该软件的各种功能来创建FMEA。这包括建立控制计划、识别可能失效模式、评估失效影响以及制定纠正措施等。 2. 分析FMEA的输出数据:用户将学会如何使用APIs IQ-FMEA软件的输出数据来评估失效模式、失效影响和措施效果。用户将了解如何使用该软件提供的分析工具来识别优先处理的故障模式、降低潜在风险并提高生产效率。 3. 生成和管理FMEA报告:用户将学会如何使用该软件生成FMEA报告并管理相关的文件。该手册提供了有关如何使用自定义模板和生成多种报告格式,包括Word、Excel、PDF等的详细指南,以及如何管理版本控制和FMEA报告的权限等。 总之,APIs IQ-FMEA软件使用手册(中文)是一本很有价值的参考书籍。它将帮助用户掌握该软件并创建高质量的FMEA报告,从而提高产品或过程的质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值