JavaScript(五)---【DOM】

零.前言

JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客

JavaScript(二)---【js数组、js对象、this指针】-CSDN博客

JavaScript(三)---【this指针,函数定义、Call、Apply、函数绑定、闭包】-CSDN博客

JavaScript(四)---【执行上下文、hoisting(提升)、严格模式、事件】-CSDN博客

一.DOM简介

1.1什么是DOM

当网页被加载时,浏览器会创建页面的文档对象模型,也就是DOMDocument Object Model

每个HTML都可以被视为一个文档树DOM为这个文档树提供了一个编程接口,开发者可以使用JS来操作这个树。

1.2文档树能干什么

文档树可以干的事情非常多,基本上所有可以想到的功能,都可以利用JS+文档树来实现。

  • JS能够改变页面中的所有HTML元素
  • JS能够改变页面中的所有HTML属性
  • JS能够改变页面中的所有CSS样式
  • JS能在页面中创建新的HTML事件

二.DOM方法

2.1概括

DOM中,所有的HTML都被定义为:“对象”,故下文中的所有“对象”都指的是“HTML元素

另外,在DOM中还有:“方法”、“属性·”两个概念。

方法”:“指能够在HTML上执行的动作

属性”:“能够设置或改变HTML元素的内容()”

例如:

    <h1 id="demo"></h1>
    <script>
        document.getElementById("demo").innerHTML = "这是一个例子."
    </script>

效果:

其中,“getEelmentById”是一个“方法”,而“innerHTML”是一个“属性

这段代码的作用就是修改<p>标签的内容

2.2常见的DOM方法【查找】

以下是四种通过不同“关键字”来查找HTML元素的方法

  • document.getElementById(id):通过元素id来查找
  • document.getElementByTagName(name):通过标签名来查找
  • document.getElementByClassName(name):通过类名来查找
  • document.querySelectorAll(id、类名、类型、属性、属性值等等):通过“CSS选择器” 来查找

值得注意的是:“上述的idname都必须用双引号包裹

2.3常见的DOM方法【改变HTML元素】

以下是四种改变HTML元素属性的方法:

  • elements.innerHTML新内容:改变元素的内容
  • elements.attribute新属性值:改变元素的属性值(这里的attribute是具体的属性名)
  • elements.setAttribute(属性名,新属性值):改变元素的属性值
  • elements.style.property新样式:改变元素的CSS样式

例如,我想要修改<input>输入框的文本类型由“text”变为“password”,可以如下使用:

    <input type="password" id="demo">
    <script>
        document.getElementById("demo").type = "password"
    </script>

2.4常见的DOM方法【添加和删除元素】

以下是五种添加、删除HTML元素的方法:

  • document.createElement(element):创建HTML元素
  • document.removeChild(element):删除HTML元素
  • document.appendChild(element):添加HTML元素
  • document.replaceChild(element):替换HTML元素
  • document.write(text):写入HTML输出流

2.5常见的DOM问题

1.NodeList与HTMLCollection

HTMLCollection”是HTML元素的集合(数组),而NodeList是“文档节点”集合的一个对象

这两者几乎相同,但是本质上不同

HTMLColeection一个数组,可以使用数组的方法来对它修改,如“pop()、join()”方法等

但是NodeList一个文档节点总和的对象,这个对象无法使用数组的方法

同时NodeList只能使用下标来访问内部元素,而HTMLCollection可以使用“下标索引、元素名、id

我们用一个例子来说明两者区别:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var list = [1,2,3,4,5,6]
        var x = document.querySelectorAll("h1.sample");
        console.log(list);
        console.log(x);
    </script>
</body>

 效果:

注意到两者的“Prototype”类型,一个是“Array数组,另一个是“NodeList” 对象

2.使用“类名”、“标签名”查询返回的是一个“数组

在使用“类名”、“标签名”来查询元素时,返回的是一个包含“所有符合条件”的元素的“NodeLsit”。
例如我们使用“标签名”查询

<body>
    <h1>我是第一个h1标签</h1>
    <h1>我是第二个h1标签</h1>
    <h1>我是第三个h1标签</h1>
    <h1>我是第四个h1标签</h1>
    <h1>我是第五个h1标签</h1>
    <script>
        var x = document.getElementsByTagName("h1");
        console.log(x);
    </script>
</body>

效果:

3.使用document.createElement()创建节点时

对于任何一个元素,它由两部分组成:“元素节点”和“文本节点

元素节点”:“代表这个元素

文本节点”:“元素内的内容

我们可以使用“document.createTextNode”来创建一个文本节点,再把这个节点添加到我们的元素节点中即可

<body>
    <h1>我是第一个h1标签</h1>
    <h1>我是第二个h1标签</h1>
    <h1>我是第三个h1标签</h1>
    <h1>我是第四个h1标签</h1>
    <h1>我是第五个h1标签</h1>
    <script>
        var body = document.getElementsByTagName("body")[0]
        var x = document.createElement("p");
        var node = document.createTextNode("这是一个由JS生成的p标签");
        x.appendChild(node);
        body.appendChild(x);
    </script>
</body>

效果:

4.使用CSS选择器查找标签时

使用CSS选择器查找符合条件的标签时,返回的是一个“所有符合条件”的"NodeList"。

例如:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var x = document.querySelectorAll("h1.sample");
        console.log(x);
    </script>
<body>

结果:

通过NodeList,我们可以实现一些功能:

<body>
    <h1 class="sample">Hello World</h1>
    <h1 class="sample">这是一个例子</h1>
    <h1 class="sample">这是一个例子</h1>
    <p id="sample"></p>
    <script>
        var x = document.querySelectorAll("h1.sample");
        console.log(x);
    </script>
    <script>
        var text = "";
        for(let i = 0;i < x.length;i++){
            text += x[i].innerHTML + "<br>";
        }
        document.getElementById("sample").innerHTML = text;
    </script>
</body>

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 Windows 中安装部署并启动连接 MongoDB 7.x(命令行方式启动、配置文件方式启动、将启动命令安装为系统服务实现开机自启)

MongoDB 的下载 下载地址&#xff1a;https://www.mongodb.com/try/download/community 这里需要对 MongoDB 的版本号说明一下&#xff1a; MongoDB 版本号的命名规则是 x.y.z&#xff0c;当其中的 y 是奇数时表示当前的版本为开发版&#xff0c;当其中的 y 是偶数时表示当前的…

“多组数组”题的注意事项,天杀的“鲁棒性”

【题目描述】 输入一些整数&#xff0c;求出它们的最小值、最大值和平均值&#xff08;保留3位小数&#xff09;。输入保证这些数都是不超过1000的整数。 输入包含多组数据&#xff0c;每组数据第一行是整数个数n&#xff0c;第二行是n个整数。n&#xff1d;0为输入结束标记&…

日志服务 HarmonyOS NEXT 日志采集最佳实践

作者&#xff1a;高玉龙&#xff08;元泊&#xff09; 背景信息 随着数字化新时代的全面展开以及 5G 与物联网&#xff08;IoT&#xff09;技术的迅速普及&#xff0c;操作系统正面临前所未有的变革需求。在这个背景下&#xff0c;华为公司自主研发的鸿蒙操作系统&#xff08…

经典文献阅读之--LOG-LIO(高效局部几何信息估计的激光雷达惯性里程计)

0. 简介 局部几何信息即法线和点分布在基于激光雷达的同时定位与地图构建&#xff08;SLAM&#xff09;中是至关重要&#xff0c;因为它为数据关联提供了约束&#xff0c;进一步确定了优化方向&#xff0c;最终影响姿态的准确性。然而即使在使用KD树或体素图的辅助下&#xff…

echarts 毕节区县地图 包含百管委、高新区 (手扣)

百度网盘 链接&#xff1a;https://pan.baidu.com/s/14yiReP8HT_bNCGMOBajexg 提取码&#xff1a;isqi

【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt 开发环境的搭建 | Qt 安装教程 文章编号&#xff1a;Qt 学习笔记 /…

坦克大战_java源码_swing界面_带毕业论文

一. 演示视频 坦克大战_java源码_swing界面_带毕业论文 二. 实现步骤 完整项目获取 https://githubs.xyz/y22.html 部分截图 启动类是 TankClinet.java&#xff0c;内置碰撞检测算法&#xff0c;线程&#xff0c;安全集合&#xff0c;一切皆对象思想等&#xff0c;是java进阶…

Annaconda的替代品miniforge!

用了多年的Annaconda竟然要收费了&#xff08;个人不收费&#xff0c;企业收费&#xff0c;但个人电脑在企业IP下&#xff0c;还是被警告了&#xff09;&#xff0c;只能用miniforge 全面替换了&#xff01; 一、卸载anaconda windows下卸载&#xff0c; 设置 -> 应用和功…

后台返回数据需要自己匹配图标,图标命名与后台返回的变量保持一致

testItemId为后台返回匹配图标的变量名 sportsTargetsData:{suggestSportTargetId: "2",unlocks: [{ testItemId: vo2max_high_knee, sportTargetName: 心肺能力, indexName: 心肺能力, sportTargetId: 1 },{ testItemId: grip_strength, sportTargetName: 基础力量…

基于YOLOV5+Pyqt5农作物叶片病害检测系统

1、引言 农作物病害的精准检测与识别是推动农业生产智能化与现代化发展的重要举措。随着计算机视觉技术的发展&#xff0c;深度学习方法已得到快速应用&#xff0c;利用卷积神经网络进行农作物病害检测与识别成为近年来研究的热点。基于传统农作物病害识别方法&#xff0c;分析…

瑞吉外卖实战学习--13、完善删除中的逻辑

完善删除中的逻辑 前言效果图逻辑介绍表结构根据mybatisPlus接口规范创建实体类和service和mapper文件1、实体类Dish和Setmeal2、Mapper接口DishMapper和SetealMapper3、Service接口DishService和setmealService4、Service实现类DishServiceImpl和setmealServicelmpl 编写删除函…

双榜有名!美创入围第一新声x天眼查「年度中国高科技高成长企业」系列榜单

为了更好地了解中国高科技高成长企业的现状和发展趋势&#xff0c;2023年底&#xff0c;【第一新声】特联合【天眼查】启动“数字未来”系列之2023年度中国高科技高成长企业系列榜单评选征集工作&#xff0c;发现和挖掘被资本市场关注&#xff0c;同时受客户认可的高科技、高成…

五、postman基础使用案例

postman基础使用 相关案例【传递查询参数】【提交表单数据】【提交JSON数据】 注&#xff1a;postman⼀款⽀持调试和测试的⼯具&#xff0c;开发、测试⼯程师都可以使⽤。方法一般统一为&#xff1a;方法→请求头→请求体→断言 相关案例 【传递查询参数】 访问TPshop搜索商品的…

高德定位 SDK 到底提供了什么服务?

最近我被高德的销售烦到不行&#xff0c;说是我用了他们的 SDK&#xff0c;现在 SDK 要收费。 表达是很绕的&#xff0c;什么授权啦&#xff0c;什么企业认证风险啦&#xff0c;讲了一堆&#xff0c;还跟我开始搬出协议了。感觉高德的销售真够垃圾的&#xff0c;编个话术都不会…

动态规划详细讲解c++|经典例题讲解认识动态规划|0-1背包问题详解

引言 uu们&#xff0c;你们好&#xff01;这次的分享是动态规划&#xff0c;其中介绍了动态规划的相关概念和做题模板&#xff08;三要素&#xff09;&#xff0c;同时为了uu们对动态规划方法有更加形象的认识&#xff0c;特地找了两个经典问题&#xff0c;和大家一起分析。并…

音频转换工具 Bigasoft FLAC Converter for Mac

Bigasoft FLAC Converter for Mac是一款专为Mac用户设计的音频转换工具&#xff0c;它能够将FLAC音频文件高效、高质量地转换为其他常见的音频格式&#xff0c;如MP3、AAC等。这款软件具有直观易用的界面&#xff0c;使用户能够轻松上手&#xff0c;无需复杂的操作步骤即可完成…

SpringBoot整合Lombok以及各种使用技巧

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合Lombok以及各种使用技巧 📚个人知识库: Leo知识库,欢迎大家访…

C语言内存函数,让内存管理更高效!

1. memcpy使⽤和模拟实现 2. memmove使⽤和模拟实现 3. memset函数的使⽤ 4. memcmp函数的使⽤ 正文开始&#xff1a; 1. memcpy 使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复…

【C++】前缀和

目录 一维前缀和二维前缀和 一维前缀和 #include <iostream> using namespace std; #include <vector> int main() {int n,q;cin >> n >> q;vector<long long> arr(n1);for(int i 1;i<n;i){cin >> arr[i];}//创造前缀和数组vector<l…

安卓Activity上滑关闭效果实现

最近在做一个屏保功能&#xff0c;需要支持如图的上滑关闭功能。 因为屏保是可以左右滑动切换的&#xff0c;内部是一个viewpager 做这个效果的时候&#xff0c;关键就是要注意外层拦截触摸事件时&#xff0c;需要有条件的拦截&#xff0c;不能影响到内部viewpager的滑动处理…