一次性搞定JS的DOM操作 js domcontentloaded
liuian 2024-12-30 05:16 61 浏览
一.什么是DOM
我们知道,无论是现在的开发框架(底层还是操作DOM)还是传统的开发都离不开DOM的操作,所以了解和学习DOM是必须的,也是成为一个全面的前端开发的必备知识和内容,那接下来我们就来看下什么是DOM,DOM的全称文档对象模型,DOM的本质就是让我们通过JS来对页面的元素进行操作的一套浏览器提供的API,它的实现方式是将页面所有的内容表示为可以修改的对象,下面就是我们比较常见的几个元素在DOM中的对应关系:
- 比如document.documentElment对应的是html元素;
- 比如document.body对应的是body元素;
- 比如document.head对应的是head元素;
js复制代码var bodyEl = document.body
var htmlEl = document.documentElement
var headEl = document.head
console.log(bodyEl, htmlEl, headEl);二.认识DOM Tree
既然认识了DOM那么就很有必要了解下一个概念DOM树,一个页面不只有html head body还有很多子元素,在html结构中最终会形成一个树结构,在抽象成DOM对象的时候,它会形成一个树结构,我们称之为DOM Tree下图就是一个普通的DOM Tree首先这个树的根部就是DOCUMENT然后其次是HTML节点,之后就是其他元素节点和元素,这样就形成了一棵树的形状,这样就形成了一棵DOM树。
DOM的学习顺序:DOM中有很多的API,在学习DOM的时候建议通过一下顺序学习。
- DOM元素之间的关系。
- 获取DOM元素。
- DOM的节点type tag content。
- DOM节点的attributes properies等等。
- DOM节点的创建,插入,克隆,删除。
- DOM节点的样式,类。
- DOM元素/window的大小,滚动,坐标。
三.DOM的整体架构
既然我们已经理解了DOM的本质是什么样的东西,那么我们来从DOM的整体架构上来了解DOM,DOM相当于是JavaScript和HTML,CSS之间的桥梁,通过浏览器提供给我们的API,我们可以对元素及其其中的内容做任何事情,DOM之间是有继承关系的,他们的继承关系如下。
document对象:Document节点表示整个载入的网页,它的实例是全局的document对象:
- 对DOM的所有操作都是从document对象开始的。
- 它是DOM的入口点,可以从document开始去访问任何节点元素。
对于最顶层的html head body元素,我们可以直接在document对象中获取到:
- html元素:=document.documentElement
- body元素:=document.body
- head元素:=document.head
- 文档声明:<!DOCTYPE html>=document.doctyp
四.节点,元素导航
当我们获取一个节点后,可以通过这个节点获取其他元素的节点,我们称之为节点之间的导航,节点的内容包含的很多,注释也是节点,但是我们需要理解元素和节点的区别,元素仅仅包含HTML元素。
- 父节点:parentNode
- 前兄弟节点:previousSibling
- 后兄弟节点:nextSibling
- 子节点:childNodes
- 第一个子节点:fristChild
- 最后一个子节点:lastChild
当我们获取了一个元素,我们就可以通过这个元素获取其他的元素,这就是元素之间的导航。
- 父元素:parentElement
- 前兄弟节点:previousElementSibling
- 后兄弟节点:nextElementSibling
- 子节点:children
- 第一个子节点:firstElementChild
- 第二个子节点:lastElementChild
五.获取元素的方法
当元素彼此相邻的时候,DOM导航属性非常有用,但是在实际开发中,我们希望可以任意的获取到某一个元素,DOM为我们提供了获取元素的方法:
在开发中我们最常用的是querySelector和querySelectorAll两个获取元素的方法,getElementById一般用来在一些低版本浏览器进行一些兼容。
六.Node节点的属性
节点的属性-nodeType:目前我们已经可以获取节点了,接下来我们看一下节点中有哪些常见的属性,以下是节点的常用属性:
节点的属性-nodeName,tagName
- nodeName:获取节点的名字,是为任意的Node定义的;
- tagName:获取元素的标签名词,属性仅适用于Element节点;
节点属性-innerHTML,textContent
- innerHTML属性,将元素中的HTML获取为字符串的形式,设置元素中的内容。
- outerHTML属性,包含元素的完整HTML,innerHTML加上元素本身。
- textContent属性,仅仅获取元素的文本内容。
innerHTML和textContent的区别:
- 使用innerHTML,我们将其作为HTML插入,带有所有HTML标签
- 使用textContent,我们将其作为文本插入,所有符号均按字面意义处理。
节点的属性-nodeValue:用于获取非元素节点的文本内容。
元素节点的其他属性:
- hidden属性:也是一个全局属性,可以用于设置元素隐藏
- value属性:input select textarea的value
- href属性:<a href="...">的href
- id属性:所有的元素的id特性(attribute)的值
七.元素的特性attribute
我们知道一个元素除了有开始标签,结束标签,内容以外还有很多属性。
浏览器在进行解析HTML元素的时候,会将对应的attribute也创建出来放在对应的元素上面。
- 标准的attribute:某些attribute属性是标准的,比如id、class、href、type、value等;
- 非标准的attribute:某些attribute属性是自定义的,比如abc、age、height等;
对所有的attribute都支持的操作。
- elem.hasAttribute(name) — 检查特性是否存在。
- elem.getAttribute(name) — 获取这个特性值。
- elem.setAttribute(name, value) — 设置这个特性值。
- elem.removeAttribute(name) — 移除这个特性。
- attributes:attr对象的集合,具有name、value属性;
attribute具有以下属性:
- 它们的名字是大小写不敏感的(id 与 ID 相同)。
- 它们的值总是字符串类型的。
八.元素的属性property
对于标准的attribute,会在DOM对象上创建与其对应的property属性(对象中的属性叫做property):
在大多数情况下,它们是相互作用的
- 改变property,通过attribute获取的值,会随着改变;
- 通过attribute操作修改,property的值会随着改变;
- 但是input的value修改只能通过attribute的方法;
- 除非特别情况,大多数情况下,设置、获取attribute,推荐使用property的方式,这是因为它默认情况下是有类型的;
HTML5的data-*自定义属性,那么它们也是可以在dataset属性中获取到的:
九.元素的class和style
有时候我们会通过JavaScript来动态修改样式,这个时候我们有两个选择:
- 选择一:在CSS中编写好对应的样式,动态的添加class;
- 选择二:动态的修改style属性;
开发中如何选择呢?
- 在大多数情况下,如果可以动态修改class完成某个功能,更推荐使用动态class;
- 如果对于某些情况,无法通过动态修改class(比如精准修改某个css属性的值),那么就可以修改style属性;
元素的className和classList:元素的class attribute,对应的property并非叫class,而是className:
- 这是因为JavaScript早期是不允许使用class这种关键字来作为对象的属性,所以DOM规范使用了className;
- 虽然现在JavaScript已经没有这样的限制,但是并不推荐,并且依然在使用className这个名称;
- 如果我们需要添加或者移除单个的class,那么可以使用classList属性。
elem.classList 是一个特殊的对象:
- elem.classList.add (class) :添加一个类
- elem.classList.remove(class):添加/移除类。
- elem.classList.toggle(class) :如果类不存在就添加类,存在就移除它。
- elem.classList.contains(class):检查给定类,返回 true/false。
- classList是可迭代对象,可以通过for of进行遍历。
元素的style属性:如果需要单独修改某一个CSS属性,那么可以通过style来操作:
- 对于多词(multi-word)属性,使用驼峰式 camelCase
- 多个样式的写法,我们需要使用cssText属性:
元素style的读取 - getComputedStyle,如果我们需要读取样式:
- 对于内联样式,是可以通过style.*的方式读取到的;
- 对于style、css文件中的样式,是读取不到的;
这个时候,我们可以通过getComputedStyle的全局函数来实现:
十.元素的常见操作
创建元素:我们进行元素的创建基本分为两个步骤
- 创建一个元素。
- 动态插入某个元素到DOM的某个位置。
插入元素:插入元素的方式如下
- node.append(...nodes or strings) —— 在 node 末尾 插入节点或字符串,
- node.prepend(...nodes or strings) —— 在 node 开头 插入节点或字符串,
- node.before(...nodes or strings) —— 在 node 前面 插入节点或字符串,
- node.after(...nodes or strings) —— 在 node 后面 插入节点或字符串,
- node.replaceWith(...nodes or strings) —— 将 node 替换为给定的节点或字符串。
移除和克隆元素:
- 移除元素我们可以调用元素本身的remove方法:
- 如果我们想要复制一个现有的元素,可以通过cloneNode方法,可以传入一个Boolean类型的值,来决定是否是深度克隆,深度克隆会克隆对应元素的子元素,否则不会;
旧的元素操作方法:很多时候我们也会看到很多旧的操作方法
- parentElem.appendChild(node):在parentElem的父元素最后位置添加一个子元素
- parentElem.insertBefore(node, nextSibling):在parentElem的nextSibling前面插入一个子元素;
- parentElem.replaceChild(node, oldChild):在parentElem中,新元素替换之前的oldChild元素;
- parentElem.removeChild(node):在parentElem中,移除某一个元素;
十一.元素的大小和滚动
十二.window的大小和滚动
十三.总结
DOM相关的内容到此就结束了,DOM的API有很多,但是其实我们并不需要全部记住,我们知道DOM在做什么事情就可以了,其实DOM就是一个沟通页面于JS的桥梁,我们使用DOM的基本思路就是,拿到对应元素对其进行修改,这个修改就是对元素的增删改查四种操作,其实很简单,当我们从更高的层次了解了DOM当我们遇到不懂的API或者需求的时候相应的查询就好~
相关推荐
-
- 驱动网卡(怎么从新驱动网卡)
-
网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...
-
2026-01-30 00:37 liuian
- win10更新助手装系统(微软win10更新助手)
-
1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...
- windows11专业版密钥最新(windows11专业版激活码永久)
-
Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...
-
- 手机删过的软件恢复(手机删除过的软件怎么恢复)
-
操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...
-
2026-01-29 23:55 liuian
- 一键ghost手动备份系统步骤(一键ghost 备份)
-
步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。 步骤...
- 怎么创建局域网(怎么创建局域网打游戏)
-
1、购买路由器一台。进入路由器把dhcp功能打开 2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。 3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...
- 精灵驱动器官方下载(精灵驱动手机版下载)
-
是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...
- 一键还原系统步骤(一键还原系统有哪些)
-
1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。 2、在弹出的“准备安装”窗口中,可...
- 电脑加速器哪个好(电脑加速器哪款好)
-
我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...
- 任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)
-
是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...
- u盘怎么恢复文件(u盘文件恢复的方法)
-
开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...
- 系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)
-
1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...
-
- 剪贴板权限设置方法(剪贴板访问权限)
-
1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...
-
2026-01-29 21:37 liuian
- 平板系统重装大师(平板重装win系统)
-
如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...
- 联想官网售后服务网点(联想官网售后服务热线)
-
联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
