JS第十四次笔记

86 阅读4分钟

1.日期对象

image.png

1.1 实例化日期对象

image.png

image.png

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    //实例化日期
    //1.获取当前时间
    const dateNow = new Date();
    console.log(dateNow);
    //2.获取指定时间
    const date = new Date('2023-6-18 09:16:22')
    console.log(date);
    //Date是js提供的内置对象 Date对象需要和new Date联用 得到一个日期对象(object)

  </script>
</body>

</html>

1.2格式化日期对象

1.2.1方法一

image.png

<body>
  <script>
    //格式化日期对象
    //1.new Date 实例化日期对象
    const date = new Date();
    //2.对日期对象进行格式化
    //获取年份
    console.log('今天是' + date.getFullYear() + "年");
    //获取月份
    console.log(date.getMonth() + 1 + "月");//注意 月份是从0~11 所以需要加一
    //获取日期
    console.log(date.getDate() + "日");
    //获取星期∏
    console.log("今天是星期" + date.getDay());//周日会获取到0
    if (date.getDay() === 0) {
      console.log('星期日');
    }
    //获取小时
    console.log('现在是' + date.getHours() + '点');
    //获取分钟
    console.log(date.getMinutes() + '分');
    //获取秒钟
    console.log(date.getSeconds() + '秒');
  </script>
</body>

image.png

1.2.2方法二

image.png

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="time"></div>
  <script>
    const div = document.getElementById("time");
    function DateTime() {
      //格式化时间=>简版
      const date = new Date();
      return `现在是` + date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
    }
    setInterval(function () {
      div.innerHTML = DateTime();
    }, 100)
  </script>

</body>

</html>

image.png

1.3 案例(时钟)

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div></div>
  <script>
    //需求:页面显示变化的时间
    //1.封装函数,格式化时间日期
    //格式化时间日期
    function getDatetime() {
      //格式化时间日期
      const date = new Date();
      //得到年份
      const year = date.getFullYear();
      //得到月份
      const month = date.getMonth() + 1;
      //得到日期
      const day = date.getDate();
      //得到小时
      let hour = date.getHours();
      //注意:时间要补零
      hour = hour < 10 ? '0' + hour : hour;
      //注意:常量const是不能被改变的 否则会报错 所以需要使用变量let
      //得到分钟
      let minute = date.getMinutes();
      minute = minute < 10 ? '0' + minute : minute;
      //得到秒
      let second = date.getSeconds();
      second = second < 10 ? '0' + second : second;
      return `'现在是北京时间:'${year}${month}${day}${hour}:${minute}:${second}`
    }
    const result = getDatetime();
    const div = document.querySelector('div');


    //2.定时执行函数
    setInterval(function () {
      const result = getDatetime();
      div.innerHTML = result;
    }, 100)
  </script>

</body>

</html>

1.3时间戳

image.png

1.3.1获取时间戳的方式:

image.png

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="time"></div>
  <script>
    //获取时间戳
    const date = new Date();
    //1.时间对象.getTime()获取时间戳
    //特点:需要实例化日期对象“const date = new Date();”
    console.log(date.getTime());

    //2.Date.now() 缺陷:只能获取当前的时间戳
    //特点:不需要实例化日期对象
    console.log(Date.now());

    //3.推荐使用 +new Date() 
    //特点:不需要实例化对象,而且可以获取任意时间戳
    console.log(+new Date('2025-01-01'));
  </script>

</body>

</html>

1.3.2案例(利用时间戳完成倒计时效果)

注意:时间戳的单位是毫秒 (毫秒和秒的进制是1000)

image.png

<!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">今天是2025年3月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="second">20</span>
    </p>
    <p class="tips">18:30:00下课</p>
  </div>
  <script>
    // 倒计时案例 当前距离  2023年1月28日 18:30 还剩多少时间

    //  转换公式
    //  h = parseInt(总秒数 / 60 / 60 % 24)   //   计算小时
    //  m = parseInt(总秒数 / 60 % 60)        //   计算分数
    //  s = parseInt(总秒数 % 60)             //   计算当前秒数
    // 1.封装函数 用将来的时间戳(需要键盘赋值来传参)减去现在的时间戳
    function getTime(newDate) {
      //console.log(newDate);
      //2.获取现在的时间戳
      const nowDate = +new Date()
      const time = (newDate - nowDate) / 1000//将时间戳转换成秒
      //3.将得到的毫秒转化为时分秒
      let h = parseInt(time / 3600 / 24)
      let m = parseInt(time / 60 % 60)
      let s = parseInt(time % 60)
      //4.补零
      h = h < 10 ? '0' + h : h
      m = m < 10 ? '0' + m : m
      s = s < 10 ? '0' + s : s
      return [h, m, s]


    }
    //获取标签
    const DateNew = +new Date('2025-03-12 18:00:00')
    const result1 = getTime(DateNew)
    //console.log(getTime(DateNew));
    //获取标签
    const hour = document.getElementById('hour')
    const minutes = document.getElementById('minutes')
    const second = document.getElementById('second')

    setInterval(function () {
      const result = getTime(DateNew)
      //通过数组下标的方式将值赋给标签
      hour.innerHTML = result[0]
      minutes.innerHTML = result[1]
      second.innerHTML = result[2]

    }, 1000)
  </script>
</body>

</html>

2.节点操作

image.png

2.1 DOM节点

DOM树:我们将HTML文档作为一个树形结构(DOM可理解为标签)

image.png

image.png

2.2查找节点

image.png


<body>
  <div class="father">
    <div class="son">文字描述</div>
  </div>
  <script>
    //通过节点的方式获取父级元素 子元素.parentNode
    const son = document.querySelector('.son')

    //想要获取父级元素 有两种方式
    //1.通过将父级元素存储到一个常量中
    const father1 = document.querySelector('.father')
    console.log(father1)
    //2.通过节点的方式获取父级元素(更加简洁)
    const father2 = son.parentNode
    console.log(father2)

    //3.也可以通过父节点的父节点获取相应的元素
    const grandpa = son.parentNode.parentNode//得到body
    console.log(grandpa)
  </script>

</body>

结果:

image.png

2.3子节点查找

<body>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
  </ul>
  <script>
    //1.通过节点操作 获取子元素 元素.children
    const ul = document.querySelector('ul');
    console.log(ul.children);
    //获取第三个li(伪数组下标节点)
    const li3 = ul.children[2]
    //2.通过节点操作获取兄弟元素
    //前一个兄弟 第二个li
    console.log(li3.previousElementSibling);
    //后一个兄弟 第四个li
    console.log(li3.nextElementSibling);
  </script>
</body>

2.4 增加节点

image.png

image.png

image.png

2.5 删除节点

<body>
  <div class="father">
    <div class="son1">son1</div>
    <div class="son2">son2</div>
    <div class="son3">son3</div>
  </div>

</body>
<script>
  //删除节点(做法1)
  const son1 = document.querySelector('.son1')
  son1.remove()

  //删除节点(做法2)
  document.querySelector('.son2').remove()

  //删除节点(做法3)
  document.querySelector('.son3').addEventListener('click', function () {
    
  })
</script>