当前位置: 首页 > 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";

相关文章:

  • 其他有关Oracle BUFFER CACHE的优化思路
  • Go语言之Map 的基本操作-《Go语言实战指南》
  • LeetCode 257. 二叉树所有路径求解:回溯算法的深度解析与实践
  • MySQL中InnoDB引擎逻辑存储结构、B+树索引结构、B+树高度及存储数据量
  • 前端父元素flex布局设置左右padding时,input溢出父元素右内边距无效
  • 我的世界模组开发——物理学(1)
  • VPLC (VPLCnext) K8S
  • YOLO学习笔记 | YOLO11对象检测,实例分割,姿态评估的TensorRT部署c++
  • 企业网站架构部署与优化第4章Nginx核心功能
  • C++ HTTP框架推荐
  • AI|Java开发 IntelliJ IDEA中接入本地部署的deepseek方法
  • docker-安装部署于macOS11
  • 防震基座在半导体晶圆制造设备抛光机详细应用案例-江苏泊苏系统集成有限公司
  • 【HALCON 】深入理解 gray_histo_abs 灰度直方图算子
  • 动态网页爬取:Python如何获取JS加载的数据?
  • docker多阶段构建镜像
  • C++中的菱形继承问题
  • Go语言gopacket库的HTTP协议分析工具实现
  • Springboot3
  • 【数据结构】链式二叉树
  • 个人网站也要备案吗/百度推广登陆首页
  • 个人网页设计首页/优化seo可以从以下几个方面进行
  • 网站域名space/网络营销的主要方式
  • 梵克雅宝官网中国官方网站/开网店怎么开 新手无货源
  • 云南企业网站/北京百度推广代理
  • 网站开发试验报告/广告资源网