Web前端105天-day45-DOM

DOM01

目录

前言

一、DOM

二、DOM树

三、class

总结


前言

DOM01学习开始


一、DOM

  • DOM: Document  Object  Model
    • 文档 : HTML代码 -- 超文本标记语言
    • 对象 : 网页真正显示的是 HTML 转换出来的 对象类型 -- document
    • 模型 : 固定的规则 -- 代表把 HTML代码 转 JS对象
  • 网页真正展示的过程
  • 学习DOM, 就可以直接操作 元素的本体; 超脱 HTML 的桎梏

二、DOM树

  • 把 HTML 的结构, 用图来展示, 样式类似树根倒着的树 , 称为 DOM树
  • 每个元素称为 树上的一个 节点 -- Node

 

<!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>dom</title>
</head>

<body>
  <h1 id="time"></h1>

  <script>
    console.log(window) // 找到 document 属性
    // document属性, 就是 HTML 文件被 浏览器解析后 得到的对象类型
    // 学习DOM 就是学习 如果使用 document 对象

    setInterval(() => {
      //获取当前时间
      var now = new Date().toLocaleTimeString()
      console.log('now:', now)

      // document对象, 可以操作页面
      document.title = now

      // 快捷方式: 所有 id 属性, 都会被自动转换成全局变量, 可以直接用 但没提示
      // 不推荐这么使用id, 因为有兼容性问题, 旧版本浏览器不支持
      const time = document.getElementById('time')
      // get: 获取
      // element: 元素
      // by: 通过
      // id: 唯一标识
      // 从 document(整个网页转换出来的对象) 中获取 id是time 的元素
      console.log(time) // log: 美化后的
      console.dir(time) // dir: 未美化的对象类型

      time.innerHTML = now
    }, 1000);
  </script>
</body>

</html>

三、class

<!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>class 16:16</title>
  <link rel="stylesheet" href="./reset.css">
  <style>
    #box {
      background-color: #f2f5f6;
      padding: 20px;
      display: flex;
    }

    #box>li {
      margin-right: 10px;
      background-color: white;
      padding: 7px 20px;
      color: #333;
      /* 圆角矩形的做法: 尽量大一点 超过高的一半 */
      border-radius: 100px;
      border: 1px solid #eee;
      /* 指针: 手 */
      cursor: pointer;
      transition: 0.2s;
    }

    #box>li:hover {
      border-color: #ff5d23;
      color: #ff5d23;
    }

    /* 注意区分:  li:active  伪类选择器, 代表点击时的状态 */
    /* li.active 代表 <li class="active">   li标签 同时 具有active样式 */
    /* 联合选择器:  两个选择器挨着写, 代表同时具有两种特性 */
    #box>li.active {
      background-color: #ff5d23;
      border-color: #ff5d23;
      color: white;
    }
  </style>
</head>

<body>
  <ul id="box">
    <li class="active">网游竞技</li>
    <li>单机热游</li>
    <li>手游休闲</li>
    <li>娱乐天地</li>
    <li>颜值</li>
    <li>科技文化</li>
  </ul>

  <script>
    // 目标: 为每个 li 元素, 添加 点击操作的监听
    const box = document.getElementById('box') // 找到 id=box 的元素

    console.dir(box) //到后台展开查看, 子元素存放在哪个属性里

    // children: 孩子们; 存放了所有子元素
    // 由于 children 的原型不是 Array, 其中没有forEach 方法可用
    // 用 for..of 遍历
    for (const li of box.children) {
      console.log(li)
      console.dir(li) // 找一找 和 点击有关的属性
      // 特征: 所有事件都是 on 开头的
      // DOM事件网站, 到 xin88.top 中查看
      // onclick : 元素的点击事件

      // 千万别用箭头函数, 因为其没有 this 关键词, 影响后续代码
      li.onclick = function () {
        console.log('this', this)
        console.dir(this) //找一找 哪个属性 和 class 有关系
        // 把点击项的 className 改成 激活 class="active"
        this.className = 'active'
      }
    }
  </script>
</body>

</html>
/* reset.css 样式重置文件 */
/* 由于不同的浏览器厂商 对同一个标签 会进行不同的美化 */
/* 保证网页在不同的浏览器上, 风格统一, 需要手动统一样式 */
/* 系统的默认美化优先级低 */

* {
  /* 边框盒子/怪异盒子 : 宽度是准确的, 不会被内边距和边框影响 */
  box-sizing: border-box;
}

img {
  /* 防止图片的幽灵空白节点 */
  display: block;
}

ul,
li {
  list-style: none;
}

body,
ul,
li,
p,
h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0;
  padding: 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>class 17:30</title>

  <style>
    #box>li.lv {
      color: green;
    }
  </style>
</head>

<body>
  <ul id="box">
    <li class="lv">亮亮</li>
    <li>铭铭</li>
    <li>泡泡</li>
    <li>凯凯</li>
    <li>浩浩</li>
  </ul>

  <script>
    // 需求: 找到所有的li, 挨个添加点击事件, 点击后添加 class='lv'

    const box = document.getElementById('box') // 利用id=box 找到ul

    console.log(box.children) //所有子元素
    // 通过 for..of 挨个处理子元素
    for (const li of box.children) {
      // xin88.top 上有 事件列表 网站
      // 别用箭头函数, 因为需要 this 指向触发事件的对象
      li.onclick = function () {
        console.log('this', this) //指向触发事件的对象
        // 修改 当前项的 class 值
        this.className = 'lv'
      }
    }
  </script>
</body>

</html>
  • 练习
<!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>
    li {
      display: inline-block;
      margin: 4px;
      border-radius: 4px;
      padding: 10px 20px;
      background-color: #eee;
    }

    li.win {
      color: red;
      background-color: #aaa;
    }
  </style>
</head>

<body>
  <ul id="app">
    <li class="win">JDG</li>
    <li>SKT1</li>
    <li>DRX</li>
    <li>GEN.G</li>
  </ul>
</body>

</html>


总结

  • DOM: 文档 对象 模型
    • HTML代码 会被浏览器 解析成 document 对象, 然后再渲染到浏览器上
    • 浏览器中真正展示的是 document 对象, 不是HTML
    • document对象中, 包含了你在HTML中 书写的所有元素
  • 学习DOM 就两个知识点:
    • 如何从 document 对象中, 准确找到 你想操作的元素
      • 通过id查找: document.getElementById
      • 子元素们: children
  • 如何操作找到的元素
    • className: 元素的class属性, 设置样式类
    • onclick : 点击事件, 会在用户点击元素时, 自动触发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值