当前位置: 首页 > article >正文

DOM API-JS通过文档对象树操作Doc和CSS

还记得我在之前的前端文章里面老是提及的 DOM 吗,当时只是简单介绍了它的组成以及作用,今天我们就来详细聊聊

Web浏览器

先来聊聊web浏览器,web浏览器是非常复杂的软件,有许多活动部件,许多部件并不能由开发者通过 JS 控制或操纵,这主要是出于安全考虑。不然网站可以访问密码等敏感信息

尽管有限制,但是 Web API 仍然给开发者提供了很多权限,比如

        窗口:窗口(window)是载入网页的浏览器标签;在 JS 中,它由 Window 对象表示,通过这个对象上的方法,我们可以对窗口进行操作,比如:返回窗口的大小(Window.innerWidth、Window.innerHeight),操作加载到窗口的文档,在客户端存储该文档的特定数据(例如使用本地数据库或其他存储机制),为当前窗口附加一个事件处理器( addEventListener( ) )等

        导航器:(navigator) 在网络上出现时,代表浏览器的状态和身份(即用户代理)。在 JS 中,它由 Navigator 对象表示,我们可以通过这个对象检索用户的首选语言、用户网络摄像头的媒体流等信息

        文档:(document,在浏览器中用 DOM 表示)是加载到窗口的实际页面,在 JS 中,它由 Document 对象表示。我们可以使用这个对象来返回和操作构成文档的 HTML 和 CSS 的信息,例如,在 DOM 中获得一个元素的引用,改变其文本内容(比如之前的 output ),对其应用新样式,创建新的元素并将其作为子元素加到当前元素,甚至完全删除它

本文主要讲的是 DOM API 的操作,也会聊聊其他部分

基础

目前在浏览器标签加载的文档是由一个文档对象模型也就是DOM表示的,它是浏览器创建的“树状结构”表示,使 HTML 结构能被编程语言轻松访问,浏览器本身在渲染页面时使用它将样式和其他信息应用于正确的元素,开发者可以在页面渲染后通过 JS 操作 DOM

DOM 的树状结构主要看 HTML 的嵌套,同层的就是兄弟节点,在里层的就是后代节点(子节点是直连的后代节点)

比如

<!doctype html>
<html lang="en-US"><head><meta charset="utf-8" /><title>Simple DOM example</title></head><body><section><imgsrc="dinosaur.png"alt="A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth." /><p>Here we will add a link to the<a href="https://www.mozilla.org/">Mozilla homepage</a></p></section></body>
</html>

它的DOM树如下(Live DOM Viewer这个网站可以将HTML转为DOM)

 树上的节点中,有的代表标签元素,有的代表文本(根节点一般是 HTML)

下面给个例子

<!DOCTYPE html>
<html lang="en-US"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Simple DOM example</title></head><body><section><img src="pow.png" alt="A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth."><p>Here we will add a link to the <a href="https://www.mozilla.org/">Mozilla homepage</a></p></section><script src="ex1.js"></script></body>
</html>

const link=document.querySelector('a');link.textContent='pow';

我们通过DOM的方法 document.querySelector( ) 选择除了第一个 <a> 元素,并更改了这个链接的文本内容(它们定义在 <a> 元素的 HTMLAnchorElement 接口上,继承于更一般的父接口 HTMLElement 以及 Node)

还有其他方法:

Document.getElementById( )

Document.getElementsByTagName( )

但是还是推荐用 querySelector 这个CSS选择器,因为它支持 CSS 语法

创建新节点

document.creatElement( ); 创建新段落

Node.appendChild( ); 在后面追加新段落,其中 Node 代表DOM中的节点名

document.createTextNode( ); 在内部链接的段落添加文本节点

移除和删除节点

Node,removeChild( )         删除节点的父节点.remove(删除节点名)

Element.remove( )         删除仅基于自身的节点(图论)

        旧浏览器不支持这种删除自身的方式,得用: 删除节点.parentNode.removeChild(删除节点)

制作副本

Node.cloneNode( )

操作样式CSS

首先,可以用 Document.stylesheets 来获得一个附加在文档上的所有样式表的列表,它返回一个包含 CSSStyleSheet 对象的类数组,接着就可以根据需要添加/删除样式(但这种方法过时了)

(CSSStyleSheet 是用于表示 CSS样式表的接口,属于 CSS对象模型(CSSOM)的一部分,通过 StyleSheet 接口继承,内含属性和方法: cssRules、insertRule(rule,index)在指定位置插入CSS规则、delete(index)、ownerRule 若样式通过@import引入,指向对应规则。比如 document.styleSheets[0].cssRules 可以得到第一个样式表的规则列表)

直接内联样式添加到元素上,通过 HTMLElement.style 属性实现

比如 para.style.color="white";

        para.style.backgroundColor="black";

http://www.lryc.cn/news/2384292.html

相关文章:

  • 实现了TCP的单向通信
  • PostgreSQL中通过查询数据插入到表的几种方法( SELECT INTO和INSERT INTO ... SELECT)
  • STM32项目实战:ADC采集
  • CYT4BB Dual Bank - 安全启动
  • Windows系统下MySQL 8.4.5压缩包安装详细教程
  • 科技行业智能化升级经典案例—某芯片公司
  • Python编程从入门到实践 PDF 高清版
  • 互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战
  • MySQL中索引最左前缀法则、索引失效情况、前缀索引、索引设计原则
  • ⚡ Linux Debian 安装与配置 Docker
  • 系统性能不达标,如何提升用户体验?
  • 《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》
  • Sentinel原理与SpringBoot整合实战
  • 智能守护校园“舌尖安全“:AI视频分析赋能名厨亮灶新时代
  • c++ 模板技巧——类型萃取
  • 初步尝试AI应用开发平台——Dify的本地部署和应用开发
  • 卷积神经网络中的局部卷积:原理、对比与应用解析
  • 重拾童年,用 CodeBuddy 做自己的快乐创作者
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • Redis 的速度为什么这么快
  • HarmonyOS实战:自定义时间选择器
  • Flannel后端为UDP模式下,分析数据包的发送方式——tun设备(三)
  • 6:OpenCV—图像滤波
  • pytorch语法学习
  • 5:OpenCV—图像亮度、对比度变换
  • Oracle 的V$ACTIVE_SESSION_HISTORY 视图
  • redis数据持久化和配置-13(配置 AOF:Appendfsync 策略)
  • 【Python 算法零基础 4.排序 ② 冒泡排序】
  • Python:操作Excel设置行高和列宽
  • docker-volume-backup 备份 ragflow volumes