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

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.xdnf.cn/news/589141.html

相关文章:

  • 【Linux 学习计划】-- makefile
  • shell脚本总结5
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • LeetCode Hot100 (哈希)
  • x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
  • OpenCV计算机视觉实战(7)——色彩空间详解
  • 网络图片的缓存和压缩
  • 海康相机---采集图像
  • 如何解决鸿蒙应用闪退问题
  • Flutter 3.32 新特性
  • 鸿蒙Flutter实战:21-混合开发详解-1-概述
  • flutter getx路由管理、状态管理、路由守卫中间件、永久储存get_storage
  • 汇川EasyPLC MODBUS-RTU通信配置和编程实现
  • S7-1500PLC通过工艺对象实现V90总线伺服定位控制(105报文)
  • 英伟达有意入股 PsiQuantum,释放战略转向量子计算的重要信号
  • JVM常量池(class文件常量池,运行时常量池,字符串常量池)
  • Mysql数据库之索引与事务
  • 【内部教程】ISOLAR-AB配置以太网栈|超详细实战版
  • Kotlin与Flutter:跨平台开发的互补之道与实战指南
  • Armadillo C++ 线性代数库介绍与使用
  • Kotlin 极简小抄 P10(类与对象、主构造函数、带有默认参数值的主构造函数、次要构造函数)
  • 【机器学习】集成学习算法及实现过程
  • Ubuntu20.04的安装(VMware)
  • 详解受约束的强化学习(四、数学符号说明)
  • PL/Python数据库: PostgreSQL Python扩展
  • Argo CD 详解:从 GitOps 到持续交付的完整实践
  • 关于数据仓库、数据湖、数据平台、数据中台和湖仓一体的概念和区别
  • 相机标定与图像处理涉及的核心坐标系
  • 2. PyQGIS Windows下开发环境搭建
  • Java——集合类