Web前端105天-day45-DOM

news2025/1/16 14:46:44

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 : 点击事件, 会在用户点击元素时, 自动触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter(十七):利用jmeter插件收集性能测试结果汇总报告和聚合报告,利用PerfMon插件收集监控服务器资源指标

利用jmeter插件收集性能测试结果 汇总报告&#xff08;Summary Report &#xff09; 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍&#xff1a; 所有数据写入一个文件&#xff1a;保存测试结果到本地…

全产业链落实循环减碳实践 宝马在华持续推进绿色转型

作为率先推出“循环减碳”理念的汽车企业&#xff0c;宝马集团将循环经济理念贯彻到产品生命周期的各个阶段&#xff0c;并以“再思考、再精减、再利用、再回收”为指导原则&#xff0c;在产业链上下游不断壮大“循环减碳朋友圈”。“可持续发展是宝马集团的战略支点之一”&…

【爬虫】JS调试解决反爬问题系列1

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

AlibabaP8,耗时182天肝出来1015页分布式全栈手册

前言 到底什么是分布式&#xff1f;这个话题一直以来就在各大平台论坛上被热议。一千个读者里面就有一千个哈姆雷特。官方这边给出的结论是&#xff1a;分布式就是将相同或相关的程序运行在多台计算机上&#xff0c;从而实现特定目标的一种计算方式。而从分布式技术的起源来看…

这可能是2022最全的Java面试八股文!共计1658页,Java技术手册的天花板

前两天有个小伙伴在后台留言&#xff0c;最近的面试越来越难了&#xff0c;尤其是技术面&#xff0c;考察得越来越细&#xff0c;越来越底层&#xff0c;庆幸的是最终顺利找到了工作。 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识 比如果这样的问题…

mitmproxy 抓包神器-1.环境准备与抓取浏览器请求

前言 常见的抓包工具有fiddler 和 charles, 这些工具都是需要安装本地客户端&#xff0c;python 版的抓包工具可以用 mitmproxy。 mitmproxy 相比Charles、fiddler的优点在于&#xff0c;它可以命令行方式或脚本的方式进行mock 简介 mitmproxy&#xff08;man-in-the-middle…

阿里云效产品【流水线Flow】企业项目代码一件发布各个云服务器

文章目录前言一、准备项目代码1.默认的项目2.浏览器访问二、使用步骤1.进入工作台2.创建流水线3.代码源4.代码扫描5.单元测试6.代码构建7.主机部署8.部署脚本三、运行测试1.运行流水线2.测试报告3.访问项目总结前言 「流水线」&#xff0c;又名「Flow」&#xff0c;是一款企业…

二、Qt定时器与文本编辑器制作《QT 入门到实战》

学习目标 了解 qt 的 pixmap了解 qt 的 label 如何显示图片了解定时器的开启了解定时器的关闭了解文件如何进行读取了解 QFileDialog 的使用了解了一个文本编辑器的基本编写巩固了 connect 的使用 一、制作一个图片浏览器 1.1 Pixmap 在 Qt 中使用 Label 可以显示文本&…

加密市场的「五维投资法」

一. 投资决策三要素 投资方法纷繁庞杂&#xff0c;但万变不离其宗&#xff0c;影响最终收益的因素&#xff0c;脱不开三个方面&#xff1a;胜率、赔率、仓位&#xff0c;通俗来说&#xff1a; 胜率&#xff1a;这一项投资&#xff0c;赢面有多大&#xff1f;有多大的把握盈利…

毕业设计-基于大数据招聘岗位可视化系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【学习笔记】JDK源码学习之ArrayList(附带面试题)

【学习笔记】JDK源码学习之ArrayList&#xff08;附带面试题&#xff09; 引言&#xff1a; 什么是 ArrayList &#xff1f;它和 List 又有什么关系&#xff1f;两者又有什么区别&#xff1f; 带着以上问题让我们来深入走进 ArrayList 。 1、ArrayList的使用 demo&#xf…

动态照片怎么制作?推荐几种操作简单的制作方法

动态照片应该怎么弄呢&#xff1f;不知道大家的家里有没有那种家庭相册&#xff0c;里面会有一些爷爷奶奶、爸爸妈妈们以前的照片&#xff0c;翻看这些照片的时候&#xff0c;就会想到那个时候的他们。不过相册里的照片基本上是一成不变的&#xff0c;有时候我会想&#xff0c;…

手写Spring6(实现应用上下文)

文章目录目标设计流程项目结构一、实现1、定义实例化前-BeanFactoryPostProcessor2、定义初始化前后-BeanPostProcessor3、定义上下文接口--ApplicationContext4、应用上下文抽象类实现--AbstractBeanFactory5、获取Bean工厂和加载资源--AbstractRefreshableApplicationContext…

webpack学习-cdn加速,使用 Tree Shaking,提取公共代码,分割代码按需加载 使用 Prepack开启 Scope Hoisting

4-9 CDN 加速 什么是 CDN 虽然前面通过了压缩代码的手段来减小网络传输大小,但实际上最影响用户体验的还是网页首次打开时的加载等待。 导致这个问题的根本是网络传输过程耗时大,CDN 的作用就是加速网络传输。 CDN 又叫内容分发网络,通过把资源部署到世界各地,用户在访问…

Mentor-dft 学习笔记 day43-Power-Aware DRC and ATPG

Power-Aware DRC and ATPG 本章介绍用于ATPG工具的power-aware DRC和ATPG流程。Power-Aware Overview 电子行业在设计连续体的主要方面采用了低功耗特性。EDA供应商和主要半导体公司定义了常用的电力数据标准格式来描述电力需求&#xff1a;UPF和CPF。Tessent Shell supports t…

Centos7迁移Anolis OS7系统

2020年12月08日CentOS官方宣布CentOS项目将停止&#xff0c;并推出CentOS Stream项目&#xff0c;详见公告 CentOS未来将会从 RedHat Enterprise Linux(RHEL) 复刻版本的 CentOS Linux 转向 CentOS Stream。 对处于生命周期中的 CentOS 版本后续影响&#xff1a; • CentOS Lin…

Codeforces Round #838 (Div. 2) A-C题解

cf比赛链接 目录 A. Divide and Conquer 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; B. Make Array Good 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; C. Binary Strings are Fun&#xff08;什么疑惑题面&#xff09; 题意&#xff1a;首先的两个…

PG::Sumo

nmap -Pn -p- -T4 --min-rate1000 192.168.170.87 nmap -Pn -p 22,80 -sCV 192.168.170.87 查看80端口的页面&#xff0c;没有什么有用的信息 尝试路径爆破&#xff0c;发现了/cgi-bin目录&#xff0c;就想到了HTB中的Shocker靶机。 继续爆破 wfuzz -c -z file,/usr/share/…

03. SQL注入漏洞基础

03. SQL注入漏洞基础 SQL注入漏洞基础&#xff08;上&#xff09; /01 SQL注入的原理 SQL注入原理 SQL注入产生的原因 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理&#xff0c;那么攻击者就可以构造特殊的SQL语句&…

泓德基金:以超融合构建生产及灾备环境,承载 O32 等关键业务系统

案例亮点 承载 O32、TA、估值等基金行业关键业务系统生产与灾备环境。 POC 期间对超融合应用承载能力以及数据库支撑能力分别进行验证&#xff0c;性能与稳定性均满足需求。 超融合首先作为灾备资源池部署&#xff0c;稳定运行一年后&#xff0c;转为生产资源池&#xff0c;并…