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

Js进阶31-DOM 操作专题

1. JavaScript 的组成部分:

  • ECMAScript:简称 ES,它是欧洲计算机协会,大概每年的六月中旬定制语法规范。
  • DOM:全称 Document Object Model,即为文档对象类型。
  • BOM:全称 Browser Object Model,即为浏览器对象类型。

2. 节点树

节点即为标签,节点之间的这种关系,我们称之为“节点树”,因为很像一棵大树。

DOM:文档对象类型,可以理解为是整个节点树最外层“根元素”。DOM 其实就是 JS 语言中内置的引用类型 document 对象,DOM 对象经常用来操作节点,也就是标签。比如节点样式、属性、文本等等。

<script type="text/javascript">// DOM:其实就是内置的 document 对象,引用类型数据console.log(document);  // #documentconsole.log(typeof document); // object
</script>

3. DOM 属性

DOM 在 JS 中,是引用类型数据,官方给我们提供了很多属性进行操作 DOM。

  • documentElement:获取节点树的 html 标签
  • head:获取节点树的 head 标签
  • title:获取节点 title 标签的文本
  • body:获取节点树的 body 标签
<script type="text/javascript">// DOM 常用属性// documentElement:获取节点树的 html 标签console.log(document.documentElement); // <html>...</html>// head:获取节点树的 head 标签console.log(document.head); // <head>...</head>// title:获取节点 title 标签的文本console.log(document.title); // 节点树认知// body:获取节点树的 body 标签console.log(document.body); // <body>...</body>
</script>

4. DOM 方法

官方也给我们提供了很多方法用来操作节点树上的标签,返回获取到的节点对象(单个)。

<!DOCTYPE html>
<html lang="en">
<head><meta id="cur" charset="UTF-8"><title>Title</title><style type="text/css">* {margin: 0;padding: 0;}#box {color: red;text-indent: 3em;background-color: cyan;}</style>
</head>
<body><div id="box">我爱你我的祖国</div><ul><li>1</li><li id="me">2</li><li class="green">3</li><li>4</li><li class="green">5</li></ul><input type="checkbox" name="hobby" /> 读书<input type="checkbox" name="hobby" /> 游泳<input type="checkbox" name="hobby" /> 画画
</body>
</html>

(1) getElementById

getElementById 方法是 document 对象的方法,可以通过标签的 Id 属性,在节点树中获取节点。

// getElementById 方法:可以根据 id 获取到节点树上的任意节点。需要给标签添加 id 属性,通过 id 选择器获取
const element = document.getElementById('box');
const eleCur = document.getElementById('cur');
const eleMe = document.getElementById('me');
console.log(element); // <div id="box">...</div>
console.log(eleCur); // <meta id="cur" charset="UTF-8">
console.log(eleMe); // <li id="me">2</li>
console.log(typeof element); // object
  • getElementById 方法可以通过标签 ID 选择器获取对应节点。
  • 一般我们将 script 标签放在程序最底部。
  • 不管节点(标签)在网页中嵌套关系如何复杂,都可以通过这个方法获取。
  • 注意:节点(标签)在 JS 中属于引用类型数据。

(2) getElementsByName

getElementsByName 方法可以根据 name 属性获取到节点树上的节点,返回获取到的所有节点(多个)。

// getElementsByName 方法:可以根据 name 获取到节点树上的任意节点。需要给标签添加 name 属性,通过 name 选择器获取
const eleHobbies = document.getElementsByName('hobby');
console.log(eleHobbies); // NodeList(3) [input, input, input]

这个方法在实际应用中有些限制,它通常用于获取带有 name 属性的表单元素,如 input、button、select 标签等。 

(3) getElementsByTagName

getElementsByTagName 方法可以根据标签名获取到节点树上的节点,返回获取到的所有节点(多个)。

// getElementsByTagName 方法:可以根据标签名获取到节点树上的任意节点。
const eleDivs = document.getElementsByTagName('div');
const eleLis = document.getElementsByTagName('li');
console.log(eleDivs); // HTMLCollection(1) [div#box]
console.log(eleLis); // HTMLCollection(5) [li, li#me, li.green, li, li.green]

(4) getElementsByClassName

getElementsByClassName 方法可以根据类名获取到节点树上的节点,返回获取到的所有节点(多个)。

// getElementsByClassName 方法:可以根据类名获取到节点树上的任意节点,需要给标签添加 class 属性,通过类选择器获取
const eleGreens = document.getElementsByClassName('green');
console.log(eleGreens); // HTMLCollection(2) [li.green, li.green]

(5) querySelector

querySelector 方法可以根据 css 选择器获取到节点树上的节点,返回第一个匹配的节点(单个)。

// querySelector 方法:可以根据 css 选择器获取到节点树上的任意节点
const eleBox = document.querySelector('#box');
const eleLi = document.querySelector('li');
const eleGreen = document.querySelector('.green');
console.log(eleBox); // <div id="box">...</div>
console.log(eleLi); // <li>1</li>
console.log(eleGreen); // <li class="green">3</li>

(6) querySelectorAll

querySelectorAll 方法可以根据 css 选择器获取到节点树上的节点,返回所有匹配的节点(多个)。

// querySelectorAll 方法:可以根据 css 选择器获取到节点树上的任意节点
const eleLisAll = document.querySelectorAll('li');
console.log(eleLisAll); // NodeList(5) [li, li#me, li.green, li, li.green]

上面这些用于获取 DOM 节点的方法可以从任意的父节点调用,而不仅仅是从 document 对象。这意味着我们可以从任何特定的 DOM 元素开始搜索,以获取其子元素或者与之相关的元素。

1 通过 id 获取元素
从任何节点调用 getElementById 并不常见,因为 id 应该是唯一的,所以 document.getElementById 已足够。但理论上,从某个较大的节点开始调用此方法,它仍然会在整个文档范围内查找该 id。

2 通过类名获取一组元素

var elements = parentNode.getElementsByClassName('className');

这里,parentNode 可以是任何 DOM 节点,它将返回该节点下所有具有指定类名的子元素。

3 通过标签名获取一组元素

var elements = parentNode.getElementsByTagName('tagName');

类似地,parentNode 是想要开始搜索的节点,它将返回该节点下所有具有指定标签名的子元素。

4 通过 CSS 选择器获取一个元素

var element = parentNode.querySelector('.className');

在这里,parentNode.querySelector 将返回第一个匹配 CSS 选择器的子元素。

5 通过 CSS 选择器获取一组元素

var elements = parentNode.querySelectorAll('.className');

这将返回 parentNode 下所有匹配 CSS 选择器的子元素。

在使用这些方法时,只要确保 parentNode 是一个有效的 DOM 节点即可。这种方法的优势在于它允许我们更具体地定位搜索范围,从而在大型文档中更有效率地找到需要的元素。

getElementsByName 实际上是一个定义在 document 对象上的方法。这意味着它不能从任意父节点调用,而只能从 document 调用。

例如,document.getElementsByName('nameValue') 是有效的,但如果尝试从非 document 节点调用此方法,则会导致错误。

5. 操作 DOM 节点

我们可以通过 DOM 方法获取到节点树上的任意节点(标签),经常通过点语法来操作节点的属性、文本、样式等。

(1) 操作节点属性

我们可以通过 DOM 方法获取节点,进而操作节点属性。

通过 节点对象.属性名,可以获取节点某一个属性的属性值,当然也可以通过 JS 来动态设置新的属性值。

<div id="box" class="cur">我是祖国的未来</div>
<div><input type="text" id="box1">
</div>
// JS 当中经常通过 DOM 获取节点,经常用来操作节点属性
const div = document.getElementById('box');
const input = document.getElementById('box1');// 获取节点属性值
console.log(div.id); // box
console.log(div.className); // cur
console.log(input.type); // text// 设置节点属性值
div.id = 'memeda';
div.className = 'hahaha';
input.type = 'password';

也可以通过节点对象的 getAttribute 方法和 setAttribute 方法来操作节点属性。

// 获取节点属性
console.log(div.getAttribute('id')); // box
console.log(input.getAttribute('type')); // text// 设置节点属性
div.setAttribute('id', 'memeda');
input.setAttribute('type', 'password');

(2) 操作节点文本

我们可以通过 DOM 对象提供的方法获取对应的节点,我们也可以通过点语法操作节点文本。

节点开始标签和结束标签之间的内容就称为节点的文本。

<p>段落文本</p>

上面的“段落文本”就是 p 标签的文本。

<p id="cur">我最近想学习 web 前端</p>
<p><input type="text" id="container" value="我是默认的文本,需通过 value 属性获取和设置">
</p>

操作节点文本分为两种情况:

  • 操作表单元素文本,需要通过 value 属性进行操作。
// 表单元素:input、select、textarea、button 这些元素
// 表单元素操作文本,需要使用 value 属性
const input = document.getElementById('container');
// 获取文本
console.log(input.value); // 我是默认的文本,需通过 value 属性获取和设置
// 设置文本
input.value = '通过 JS 给表单元素重新设置新的文本';
  • 操作非表单元素,需要通过 innerHTML 属性和 InnerText 属性进行操作。
// 非表单元素:不是 input、select、textarea、button 这些元素,如 div、span、a、img 等
// 非表单元素操作文本,需要使用 innerHTML 属性和 innerText 属性
const p = document.getElementById('cur');
// 获取文本
p.innerHTML = '我最近想学习 <span style="color: red;">web 前端</span>';
p.innerText = '我是中国最帅的帅大哥';
// 设置文本
p.innerHTML = '我是中国最帅的帅大哥';

(3) 操作节点样式

我们可以通过 DOM 方法获取节点,可以操作节点的行内样式。

<p id="box" style="width: 100px; height: 100px; color: red; background-color: cyan">我是大帅哥</p>
// 获取节点
const p = document.getElementById('box');// 获取节点的行内样式
console.log(p.style); // CSSStyleDeclaration {0: "width", 1: "height", 2: "color", 3: "background-color", width: "100px", height: "100px", color: "red", backgroundColor: "cyan", length: 4}
console.log(p.style.width); // 100px
console.log(p.style['color']); // red// 设置节点的行内样式
p.style.width = '200px';
p.style.height = '200px';
p.style['color'] = 'cyan';
p.style.backgroundColor = 'red'; // 驼峰
  • 在 JS 中点语法操作行内样式。
  • 通过 JS 代码,可以获取行内样式(内部样式和外部样式不可以),当然也可以设置行内样式。
  • 节点样式 background-color、font-size 等中间带有横杠的样式,样式名需变为驼峰写法。
http://www.lryc.cn/news/277067.html

相关文章:

  • Hive之set参数大全-4
  • 竞赛保研 基于深度学习的人脸识别系统
  • 9.建造者模式
  • 简单的MOV转MP4方法
  • YOLOv8改进 | Neck篇 | 利用ASF-YOLO改进特征融合层(适用于分割和目标检测)
  • 基于模块自定义扩展字段的后端逻辑实现(一)
  • 力扣:18.四数之和
  • .netcore 6 ioc注入的三种方式
  • Python轴承故障诊断 (十)基于VMD+CNN-Transfromer的故障分类
  • 【复习】人工智能 第7章 专家系统与机器学习
  • 使用 Apache PDFBox 操作PDF文件
  • 【Python 常用脚本及命令系列 3.2 -- 检测到弹框跳出然后关掉它--脚本实现】
  • junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法
  • C# winform判断自身程序是否已运行,如果已运行则激活窗体
  • 超维空间M1无人机使用说明书——21、基于opencv的人脸识别
  • Redis 持久化——AOF
  • 华为云服务介绍(二)
  • mysql列题
  • cpu缓存一致性
  • Android Framework 常见解决方案(25-1)定制CPUSET解决方案-framework部分修改
  • PyTorch 参数化深度解析:自定义、管理和优化模型参数
  • 自承载 Self-Host ASP.NET Web API 1 (C#)
  • Vue2-子传父和父传子的基本用法
  • 使用numpy处理图片——镜像翻转和旋转
  • HTML5 article标签,<time>...</time>标签和pubdate属性的运用
  • Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用
  • RK3568平台开发系列讲解(驱动篇)pinctrl 函数操作集结构体讲解
  • vue购物车案例,v-model 之 lazy、number、trim,与后端交互
  • 云原生Kubernetes: Kubeadm部署K8S 1.29版本 单Master架构
  • C++协程操作