Dom节点 时间 重重绘和回流

1节点操作

1.DOM节点

在这里插入图片描述

2.查找节点

在这里插入图片描述

2.1父节点查找

parentNode 属性

  • 返回最近一级的父节点找不到返回为null

语法:

子元素.parentNode
<body>
    <div class="father">
        <div class="son">儿子</div>
    </div>
    <script>
        let son = document.querySelector('.son')
        //找爸爸
        console.log(son.parentNode)
        // son.parentNode.style.display = 'none'
    </script>
</body>

在这里插入图片描述

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

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <style>
    .erweima {
      width: 149px;
      height: 152px;
      border: 1px solid #000;
      background: url(./images/456.png) no-repeat;
      position: relative;
    }

    .close {
      position: absolute;
      right: -52px;
      top: -1px;
      width: 50px;
      height: 50px;
      background: url(./images/bgs.png) no-repeat -159px -102px;
      cursor: pointer;
      border: 1px solid #000;
    }
  </style>
</head>

<body>
  
  <div class="erweima">
    <span class="close"></span>
  </div>
  <div class="erweima">
    <span class="close"></span>
  </div>
  <div class="erweima">
    <span class="close"></span>
  </div>
  <div class="erweima">
    <span class="close"></span>
  </div>
  <div class="erweima">
    <span class="close"></span>
  </div>

  <script>
    let close_btn = document.querySelectorAll('.close')
    for(let i = 0; i < close_btn.length; i ++ ){
      close_btn[i].addEventListener('click',function() {
        // this.parentNode.style.display = 'none' //不保留原先位置
        this.parentNode.style.visibility = 'hidden' //保留原先位置
      })
    }
  </script>
</body>

</html>

2.2子节点查找

childNodes(了解):

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

children (重点)

  • 仅获得所有元素节点
  • 返回的还是一个伪数组

语法:

父元素.children
<!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>
</head>
<body>
    <button>点击</button>
    <ul>
        <li>我是孩纸</li>
        <li>我是孩纸</li>
        <li>我是孩纸</li>
        <li>我是孩纸</li>
        <li>我是孩纸</li>
        <li>我是孩纸</li>
    </ul>
    <script>
        let btn = document.querySelector('button')
        let ul = document.querySelector('ul')
        btn.addEventListener('click', function() {
            // console.log((ul.children))
            let lis = ul.children
            for(let i = 0; i < lis.length; i ++ ){
                lis[i].style.color = 'red'
            }
            ul.children[0].style.color = 'green'
        })
    </script>
</body>
</html>

3.3兄弟关系查找:

  1. 下一个兄弟节点
  • nextElementSibling 属性
  1. 上一个兄弟节点
  • previousElementSibling 属性
<!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>
</head>
<body>
    <button>点击</button>
    <ul>
        <li>1</li>
        <li class="two">2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        let btn = document.querySelector('button')
        let two = document.querySelector('.two')
        btn.addEventListener('click', function() {
            // tow.style.color = 'red'
            two.nextElementSibling.style.color = 'red'
            two.previousElementSibling.style.color = 'blue'
        })
    </script>
</body>
</html>

3.增加节点

3.1创建节点

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

  • 创建元素节点方法:

    //创造一个新的元素节点
    document.createElement('标签名')
    
  • 插入到父元素中某个子元素的前面

//插入到某个子元素的前面
父元素.insertBefore(要插入的元素,在哪个元素前面)
<body>
    <ul>
        <li>我是一</li>
        <li>我是二</li>
    </ul>
    <script>
        // 1. 创建新的标签节点
        // let div = document.createElement('div')
        // div.className = 'current'
        let ul = document.querySelector('ul')
        let li = document.createElement('li')
        li.innerHTML = '我是小李'
        // 2. 追加节点 父元素.appendChild(子元素) 后面追加
        ul.appendChild(li)
        // 3. 追加节点 父元素.insertBefore(子元素, 放到哪个元素的前面)
        ul.insertBefore(li, ul.children[1])
    </script>
</body>

3.2增加节点

在这里插入图片描述

4.删除节点

  • 若一个节点在页面中已不需要时,可以删除它
  • 在JavaScript原生DOM操作中,要删除元素必须通过父元素删除
  • 语法
父元素.removeChild(要删除的元素)
  • 注:
    • 如不存在父子关系则删除不成功
    • 删除节点和隐藏节点(display:none) 有区别的:隐藏节点还是存在的,但是删除,则从html中删除节点
<body>
    <button>点击</button>
    <ul>
        <li>我说在这就在这</li>
        <li>我说在这就在这</li>
        <li>我说在这就在这</li>
        <li>我说在这就在这</li>
        <li>我说在这就在这</li>
    </ul>
    <script>
        //需求 点击按钮 删除小li
        let btn = document.querySelector('button')
        let ul = document.querySelector('ul')
        btn.addEventListener('click', function() {
            // 删除的语法 父元素.removeChild(子元素)
            ul.removeChild(ul.children[0])
        })
    </script>
</body>

2时间对象

2.1实例化

  • 在代码中发现了 new关键字时,一般将这个操作称为实例化

  • 创建一个时间对象并获取时间

    • 获得当前时间

      let date = new Date()
      
    • 获得指定时间

      let date = new Date( '1949-10-01')
      
<body>
    <script>
    // new 实例化 时间对象
    let date = new Date()
    console.log(date)
    // 小括号里面写上时间,可以返回指定的时间
    let last = new Date('2022/3/1 20:2:35')
    console.log(last)
    </script>
</body>

2.2时间对象方法

在这里插入图片描述

<!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: 400px;
            height: 50px;
            background-color: pink;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        let arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六',]
        let div = document.querySelector('div')

        getTime()

        setInterval(getTime,1000)

        function getTime() {
            let date = new Date()
            let year = date.getFullYear()
            let month = date.getMonth() + 1
            let date1 = date.getDate()
            let hour = date.getHours()
            let minute = date.getMinutes()
            let second = date.getSeconds()
            let day = date.getDay()
            div.innerHTML = `今天是: ${year}${month}${date1}${hour}:${minute}:${second} ${arr[day]}`
        }
    </script>
</body>
</html>

2.3 时间戳

什么是时间戳

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

三种方式获取时间戳

  1. 使用getTime()方法
// 1.实例化
let date = new Date()
// 2.获取时间戳
console.log(date.getTime())
  1. 简写+new Date()

    console.log(+new Date())
    
  2. 使用Date().now()

    console.log(Date.now())
    
    • 无需实例化(即没有添加new)
    • 但是只能得到当前的时间戳,而前面两种可以返回指定时间的时间戳
<body>
    <script>
        // 时间戳是总的毫秒数 是独一无二的
        // 计算倒计时: 核心思想:
        // 将来时间 9.1 12:00 有一个时间戳 
        // 现在的时间 6.2 15:00 有一个时间戳
        // 可以利用将来的时间戳 - 现在的时间戳 = 剩余的时间毫秒数
        // 转换为时分秒就是剩余的时间了
        // 1.getTime()
        // let date = new Date()
        // console.log(date.getTime())

        // 2._new Date()
        // console.log(+new Date()) //当前时间戳
        // console.log(+new Date('2022-8-3 15:3:55')); //指定时间 的时间戳
        // 3.Date.now()
        console.log(Date.now())
    </script>
</body>

3重绘和回流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值