JavaScript青少年简明教程:DOM和CSS简介
JavaScript青少年简明教程:DOM和CSS简介
DOM简介
DOM(Document Object Model)将文档表示为一个树形结构,其中每个节点都是一个对象,每个对象都有其自身的属性和方法。
通过对DOM的操作,开发者可以使用编程语言(如JavaScript)动态地更新页面内容、样式以及处理用户交互,为用户提供丰富的体验。
【DOM元素和HTML文档标签的关系

HTML标签是定义网页内容和结构的标记语言元素,存在于HTML文件中。比如<title>,<a>,<h1>等。它们是静态的,决定了网页最初的内容布局。
而DOM(文档对象模型)元素是HTML标签在浏览器中的对象表示形式。当浏览器解析HTML文档时,会根据标签生成对应的DOM元素,形成一个树状结构。DOM元素是动态的对象模型,可以通过JavaScript等脚本语言来访问和操作。
说明:
HTML标签是编写网页内容和结构的标记。
DOM元素是标签在浏览器内存中的对象表示和数据模型。
DOM元素与HTML标签并不是一一对应的关系,因为一个HTML标签在DOM中可能对应多个节点对象。这是由于浏览器解析HTML时,除了构建对应元素节点外,还会创建其他节点,比如文本节点、属性节点等。
举个例子,对于HTML标签<p id="test">Hello World</p>
在DOM中会存在如下节点:
元素节点 - <p>元素
属性节点 - id="test"的属性节点
文本节点 - Hello World的文本节点
所以一个看似简单的HTML标签,在DOM树中可能会有多个节点来表示它的不同部分,而不是简单的一一对应。
另外,除了HTML解析出的节点,DOM还提供了一些附加的节点对象,比如document对象、window对象等,它们在HTML中没有直接对应的标签。】
下面给出一个通过JavaScript操作DOM的示例:
<html lang="zh">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DOM操作示例</title>
</head>
<body> <h1 id="greeting">你好,世界!</h1> <button onclick="changeGreeting()">点击我改变问候语</button> <script>// 定义一个函数来改变问候语 function changeGreeting() { // 使用getElementById方法来获取id为"greeting"的元素 let greetingElement = document.getElementById('greeting'); // 修改该元素的内容为新的问候语 greetingElement.textContent = '你好,JavaScript!'; }</script> </body>
</html>
在这个示例中,当你点击按钮时,会触发changeGreeting函数。该函数首先使用document.getElementById方法获取页面上id为greeting的元素(即<h1>元素),然后修改该元素的textContent属性来改变其显示的内容。这样,<h1>元素的内容将从“你好,世界!”更改为“你好,JavaScript!”
以下是一些常见的DOM操作介绍:
以下是一些常见的DOM操作介绍:
1. 访问DOM元素
通过ID获取元素
let element = document.getElementById('myElement');
通过类名获取元素
返回一个包含所有匹配元素的HTMLCollection。
let elements = document.getElementsByClassName('myClass');
通过标签名获取元素
返回一个包含所有匹配元素的HTMLCollection。
let elements = document.getElementsByTagName('div');
通过CSS选择器获取元素
返回第一个匹配的元素。
let element = document.querySelector('.myClass');
返回所有匹配的元素,返回的是一个NodeList。
let elements = document.querySelectorAll('.myClass');
2. 修改DOM元素内容和属性
修改元素内容
a)修改元素的文本内容:
element.textContent = '新的文本内容';
例如,操作网页的文档对象模型 (DOM),例如修改元素内容:
<p id="myParagraph">Hello, world!</p>
<script>
document.getElementById("myParagraph").textContent = "Hello, JavaScript!";
</script>
b)修改元素的HTML内容:
element.innerHTML = '<span>新的HTML内容</span>';
修改元素属性
element.setAttribute('src', 'image.png');
获取元素属性
let src = element.getAttribute('src');
删除元素属性
element.removeAttribute('src');
3. 修改元素样式
通过style属性修改内联样式
element.style.color = 'blue';
element.style.fontSize = '16px';
添加或删除类名
element.classList.add('newClass');
element.classList.remove('oldClass');
element.classList.toggle('activeClass'); // 如果类名存在则移除,否则添加
4. 创建和删除元素
创建新元素
let newElement = document.createElement('div');
newElement.textContent = '我是一个新元素';
添加新元素到DOM
let parentElement = document.getElementById('parent');
parentElement.appendChild(newElement);
删除元素
parentElement.removeChild(newElement);
在JavaScript中,操作表单元素是一个常见的任务,它允许你读取用户输入、验证数据、动态地更改表单内容等。下面给出获取表单元素示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Form Example</title>
</head>
<body><form id="myForm"><label for="name">Name:</label><input type="text" id="name" name="name"><br><label for="age">Age:</label><input type="number" id="age" name="age"><br><input type="submit" value="Submit"></form><script>const form = document.getElementById('myForm');form.addEventListener('submit', function(event) {event.preventDefault(); // 防止表单实际提交const name = document.getElementById('name').value;const age = document.getElementById('age').value;alert('Name:'+ name + ' '+ 'Age:'+age);});</script>
</body>
</html>
此例,使用document.getElementById 获取表单元素,然后访问其 value 属性来获取用户输入的数据。
CSS 简介
CSS (Cascading Style Sheets) 是一种样式表语言,用于描述和控制网页中元素的呈现效果,包括布局、字体、颜色、背景等方面的样式。CSS 是网页设计中最重要的技术之一,它可以使网页内容和样式相分离,有利于内容的重复使用和样式的统一管理。
CSS 的主要作用如下:
- 布局和排版:通过设置元素的宽高、边距、填充、浮动、定位等属性,可以实现不同的布局和排版方式。
- 字体和文本样式:可以设置文本的字体family、大小、颜色、加粗、倾斜、行高、对齐方式等样式。
- 背景和边框:可以为元素设置背景颜色、背景图片、背景重复方式,以及边框的样式、颜色、宽度等。
- 盒模型:CSS 将网页元素视为矩形盒子,通过设置 margin、padding、border 等属性来控制盒子的样式。
- 过渡和动画:CSS3 引入了过渡和动画功能,可以实现元素的平滑过渡和动画效果。
CSS 可以通过多种方式与 HTML 页面关联:内联样式、内部样式表、外部样式表等。在实际开发中,通常推荐使用外部样式表的方式,利于样式的复用和维护。CSS 的语法包括选择器、属性和值,通过不同的选择器可以精准地选中页面中的元素并设置其样式。
CSS 选择器用于“查找”(或选取)要设置样式的 HTML 元素。
要对HTML页面中的元素实现一对一,一对多或者多对一的控制,可用CSS 规则集(rule-set)实现,CSS 规则集也称为css样式定义,CSS 规则集由选择器和声明块组成,CSS语法
CSS规则由选择器和声明块组成:
选择器 {
属性: 值;
}
选择器(selector):用于选择要应用样式的HTML元素。常用选择器:
元素选择器(如 p、div、span 等),选择指定的元素
类选择器(如 .classname),选择指定类的元素,类名以点(.)开头
ID选择器(如 #idname),选择指定ID的元素,ID名以井号(#)开头。
属性选择器(如 [attr=value]),选择指定属性的元素。
伪类选择器(如 :hover、:active 等),选择特定状态的元素。
等
声明块(declaration block):包含一个或多个声明,每个声明由属性(property)和属性值(value)组成,属性和值之间用冒号分隔,声明之间用分号分隔。
属性 (Property): 要改变的样式特性,如颜色、字体、布局等。
值 (Value): 指定给属性的值,即你希望样式特性具有什么样的表现。
换句话说,声明块指明了样式,选择器指明了 “样式”的作用对象,也就是“样式”作用于网页中的哪些元素。
CSS注释
CSS中的注释以 /* 开头,以 */ 结尾。注释内容不会被浏览器解析。
CSS示例:
/* 选择器 */
body {
/* 声明块 */
background-color: lightblue; /* 属性: 值; */
}
h1 {
color: navy;
font-size: 24px;
}
p {
color: green;
}
CSS(层叠样式表)可以通过多种方式应用到HTML文档中,主要有三种:内联样式(Inline Styles)、内部样式表(Internal Stylesheets)和外部样式表(External Stylesheets)。:
1. 行内样式(Inline Styles)
直接在HTML元素的style属性中定义样式。这种方式仅适用于单个元素。但一般不推荐使用,因为它和HTML代码混杂在一起,不易于维护。例如:
<!DOCTYPE html>
<html>
<head> </head>
<body> <p style="color: blue; font-size: 20px;">这是一个段落。</p>
</body>
</html>
2. 内部样式表(Internal Style Sheet)
在HTML文件的<head>标签内的<style>标签中的定义样式。这种方式在HTML文件内将将样式代码与HTML代码进行了适当分离——写在不同部分。例:
<!DOCTYPE html>
<html>
<head> <style> p { color: blue; font-size: 20px; } </style>
</head>
<body> <p>这是一个段落。</p>
</body>
</html>
3. 外部样式表(External Stylesheets)
外部样式表是将样式代码写在单独的.css文件中,并通过HTML文件的<link>标签引入。这种方式是最推荐的方式,因为它可以实现样式代码的复用,提高代码的可维护性。
假设创建的css的文件名为styles.css,内容如下:
p { color: blue; font-size: 20px;
}
在HTML文件中引入这个CSS文件:
<!DOCTYPE html>
<html>
<head> <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body> <p>这是一个段落。</p>
</body>
</html>
进一步学习,可参考:
HTML网页文档和DOM结构介绍 https://blog.csdn.net/cnds123/article/details/136901800
BOM和DOM入门 https://blog.csdn.net/cnds123/article/details/109635554
CSS选择器介绍https://blog.csdn.net/cnds123/article/details/125926256
相关文章:
JavaScript青少年简明教程:DOM和CSS简介
JavaScript青少年简明教程:DOM和CSS简介 DOM简介 DOM(Document Object Model)将文档表示为一个树形结构,其中每个节点都是一个对象,每个对象都有其自身的属性和方法。 通过对DOM的操作,开发者可以使用编…...
架构师知识梳理(一):计算机硬件
目录 计算机硬件组成 CPU CPU的组成 CPU的功能 校验码 奇偶校验 CRC CRC计算案例 指令 指令指行过程 指令系统 指令系统分类 指令流水线技术 流水线技术相关计算公式 存储 计算机存储系统设计 高速缓存Cache 缓存的局部性原理 地址映射 替换算法 关于命中…...
从根儿上学习spring 四 之run方法启动第一段
图1 由上图我们可以看到,我把run方法分成了5个小段,每小段使用红框圈了起来,这一篇我们先开始讲第一段。大家需要关注下行号,我讲的时候可能会使用行号对应具体某行代码。 图1-289-290行: 没啥好说的定义了两个变量&…...
智能闹钟如何判断用户已经醒了?
智能闹钟判断用户是否已经醒来的方式主要依赖于其内置的传感器和算法系统。以下是一些常见的判断方法: 一、传感器监测 体动传感器:智能闹钟通常配备有体动传感器,用于监测用户的身体运动。当用户从睡眠状态转变为清醒状态,并开始…...
【算法】动态规划解决背包问题
应用场景——01背包问题 有一个背包,背包的容量为 4,现有如下物品 要求 1.目标为装入背包的总价值最大,并且重量不超出 2.要求装入的物品不能重复 动态规划算法介绍 1.动态规划算法的核心是:将大问题划分为小问题进行解决&…...
day09 工作日报表
日期 30日07月2024年 任务安排 今天主要就是讲了security类工作的原理,然后就是让我们自己做项目 工作中的问题 今天做项目的时候发现有时候用postman测试返回20001,说错误见控制台,但是控制台一片祥和,于是就尝试用tr…...
C++学习之路(1)— 第一个HelloWorld程序
C学习之路(1)— 第一个HelloWorld程序 一、前言 C在C语言的基础上添加了对面向对象编程和泛型编程的支持,在 20世纪90年代便是最重要的编程语言之一,并在21世纪仍保持强劲势头。C继承了C语言高效、简洁、快速和可移植性的传统。 …...
python3 pyside6图形库学习笔记及实践(三)
目录 前言菜单栏相关控件使用QtDesigner快速构建菜单栏结构语法 上下文菜单概念为窗体添加上下文菜单为控件添加上下文菜单 折叠菜单资源的加载内置图标Rcc的使用创建资源文件加载资源文件 前言 本系列文章为b站PySide6教程以及官方文档的学习笔记 原视频传送门:【…...
03 库的操作
目录 创建查看修改删除备份和恢复查看连接情况 1. 创建 语法 CRATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] …] create_specification: CHARACTER SET charset_name CPLLATE collation_name 说明: 大写的标识关键…...
嵌入式人工智能(44-基于树莓派4B的扩展板-LED按键数码管TM1638)
树莓派性能非常强悍,但是对于某些复杂的项目来说,会出现心有余而口不足的情况,为了解决这类问题,可以在树莓派上使用扩展板,我们介绍几款常见的扩展板,不仅可以扩展到树莓派,其他单片机或嵌入式…...
linux通过抓包工具tcpdump查看80端口访问量情况
方法: tcpdump -i ens32 -tn dst port 80 -c 10 | awk -F"." {print $1"."$2"."$3"."$4} | sort | uniq -c | sort -nr |head -n 10 #-i:指定端口 #-t:在输出的每一行不打印时间戳 #-nÿ…...
Mac 上安装和卸载 SDKMAN 及管理多个 JDK
前言 当电脑上有多个 JDK 环境的时候,切换管理比较麻烦,这时候可以使用 SDKMAN 来安装、管理 JDK。 一、安装 SDKMAN! 1. 安装前置条件 首先,确保已经安装了 curl 。如果没有,可以通过 Homebrew 来安装: brew inst…...
字节测开一面面经
1 . 自我介绍 2 . 讲一下常见的数据结构 : 讲了数组,set,list,map,树,图,队列 , 栈等 ; 3 . 讲一下java反射场景和作用 ; 4 . 讲一下你了解的机器学习算法 ; 5 . 我讲完ML之后 , 问了knn和贝叶斯的使用的场景区别(没答上来) ; 6 .…...
HTML 段落
HTML 段落 概述 HTML(超文本标记语言)是构建网页的标准语言,而段落是构成网页内容的基本单元。在HTML中,段落是通过<p>标签来定义的。本文将详细介绍HTML段落的相关知识,包括段落的基本结构、样式设置、以及在…...
【Mind+】掌控板入门教程04 迷你动画片
还记得小时候每天放学必看的动画片吗?还记得那些年陪伴我一起长大的卡通人物吗?勇救爷爷的葫芦娃,我们的朋友小哪吒,相信这些经典的动画形象已经成为了一代人童年的美好回忆。今天就让我们用掌控板来制作一部迷你动画片吧。 项目示…...
文件上传漏洞-HackBar使用
介绍 HackBar 是一个用于浏览器的扩展插件,主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能,可以帮助用户执行各种网络攻击和测试,包括 XSS、SQL 注入、CSRF、路径穿越等 下载地址 可以到github上面去下载࿰…...
鸿蒙媒体开发【相机数据采集保存】音频和视频
相机数据采集保存 介绍 本示例主要展示了相机的相关功能,使用libohcamera.so 接口实现相机的预览、拍照、录像、前后置摄像头切换进行拍照、录像,以及对焦、曝光等控制类功能。 效果预览 使用说明 弹出是否允许“CameraSample”使用相机?…...
【java基础】徒手写Hello, World!程序
文章目录 前提:java环境变量配置使用vscode编写helloworld解析 前提:java环境变量配置 https://blog.csdn.net/xzzteach/article/details/140869188 使用vscode编写helloworld code .为什么用code看下图 报错了!!!&…...
对 vllm 与 ollama 的一些研究
今天咱们来聊聊 vllm 和 ollama 这两个听起来就挺酷的玩意儿。这俩都是现在 AI 圈子里的大明星,专门用来让那些超大型的 AI 模型跑得更顺溜。 先说说 vllm 吧,这家伙的绝活儿是剪枝。啥叫剪枝呢?想象一下,你有个花园,…...
浅谈基础的图算法——强联通分量算法(c++)
文章目录 强联通分量SCC概念例子有向图的DFS树代码例题讲解[POI2008] BLO-Blockade题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 【模板】割点(割顶)题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
