Javascript教程十————DOM

JavaScript的DOM(JS) 目录 1.DOM概述 2.获取HTML元素 3.修改HTML 4 修改CSS样式 5.元素操作 6.DOM事件 7.EvenListener监听事件 1.DOM概述 通过 HTML DOM,使用 JavaScript访问 HTML 文档的所有元素。 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对... 阅读详情

DOM对象

DOM是HTML文件被浏览器解析后的一个树形结构,用于在浏览器中显示HTML中的内容,同时浏览器只会生成一颗DOM树,因此,只有一个DOM的根结点document。

操纵DOM树的操作:遍历、添加、删除、更新。

获取一个DOM树的节点主要方法有三种:

document.getElementById() // ID 是唯一的在HTML文件中
document.getElementsByTagname() // 根据标签来获取一组节点
document.getElementsByClassName() // 根据classname获取一组节点

var test = document.getElementById('test');
// 获取节点test下的所有直属子节点:
var cs = test.children;
// 获取节点test下第一个、最后一个子节点:
var first = test.firstElementChild;
var last = test.lastElementChild;

更新

var test = document.getElementById('test');
test.innerHTML = 'ABC'; // test内的HTML改成‘ABC’
test.innerText = 'ABC'; // test内的文本改成‘ABC’
test.style.color = 'red'; // 更改样式

插入

如果某个标签内容是空的,那么test.innerHTML()会为你添加上新节点,但如果内部有内容,则会出现覆盖的情况。

appendChild

把一个子节点添加到父节点的最后一个子节点。

insertBefore

parentElement.insertBefore(newElement, referenceElement);
// 子节点会插入到referenceElement之前

删除

要删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的removeChild把字节点删掉。

var self = document.getElementById('to-be-removed');
// 拿到父节点:
var parent = self.parentElement;
// 删除:
var removed = parent.removeChild(self);

事件

JavaScript与HTML的交互是依靠事件进行驱动的。所谓事件 event,便是网页的点击或鼠标动作作出的响应。通俗的说,这种模型其实就是一个观察者模式。(事件是对象主题,而这一个个的监听器就是一个个观察者)

这里请先查看一下JS教程十一——事件循环机制,之后再来看这里。

事件流便是事件从触发开始到完成一系列动作的流程。但是事件流的顺序有两种,而且是完全不同的两种。

事件冒泡流

事件冒泡流是微软(IE)公司提出的,事件触发是由最里面的源对象开始,一直向外扩散,这个原对象就是 event.target ,是由里向外的触发,举个🌰:

<div onclick='submit()'>
	<div onclick= 'click()'>
		<p onclick = 'button()'/>
	</div> 
</div>

执行流程:button --> click --> submit(其实这也是人的常识认知)就像气泡冒泡一样,从水底冒泡到水面

事件捕获流

事件捕获流是网景(Netscape)公司提出的,这是第二种,事件捕获,就和第一种截然相反,是从外到里进行一一捕获。

执行流程:submit --> click --> button

事件流

DOM的事件流一般分为三个阶段:事件捕获阶段、目标阶段、事件冒泡阶段。

1、事件捕获:网页的根节点DOM,然后从跟节点一层层像里面去捕获目标,一直倒发生事件的标签上。dom —> div

2、目标阶段:事件处于 div 标签上,也是事件处理阶段。

3、事件冒泡:捕获到事件后,再将事件绑定到 DOM 树上,返回到根节点上。

事件委托

事件委托的意思是,不会在事件源上放置事件监听,而是把监听放置在父级标签上,举个🌰:

当我们有一连串的标签,他们都需要绑定同一个函数(假设是点击显示文字内容)

如果把每个标签都绑定事件,那么新增标签,还需要继续绑定,就十分麻烦。所以事件就会被委托给他们的父级标签。

var father = document.getElementById('theFather');

father.addEventlistener('click', showText,false);   // 获取父级标签,绑定事件监听器,一旦监听到有点击动作,就会响应函数showText

function showText(){
	console.log(event.target.innerHTML);  
}

事件委托其实依赖的是事件的冒泡,真实的event.target会在冒泡过程中被父级标签监听到。

addEventListener

为标签绑定事件监听器,addEventListener一共有三个参数:

addEventListener(event,function, useCapture);

event :触发的动作;function:动作会执行的函数操作;useCapture:true,捕获期间执行;false,冒泡期间执行。

<div id="btn3">
	btn3
	<div id="btn2">
    	btn2
    	<div id="btn1">
        	btn1
    	</div>
    </div>
</div>
<script>
btn1.addEventListener('click',function(){
	console.log('btn1捕获')
}, true)
btn1.addEventListener('click',function(){
	console.log('btn1冒泡')
}, false)
btn2.addEventListener('click',function(){
	console.log('btn2捕获')
}, true)
	btn2.addEventListener('click',function(){
console.log('btn2冒泡')
}, false)
btn3.addEventListener('click',function(){
	console.log('btn3捕获')
}, true)
btn3.addEventListener('click',function(){
	console.log('btn3冒泡')
}, false)
</script>

btn3捕获 – btn2捕获 – btn1捕获 – btn1冒泡 – btn2冒泡 – btn3冒泡

注意:因为最底层的btn1同时绑定了冒泡和捕获,执行的顺序完全按照绑定的先后进行。

阻止冒泡

所谓的阻止冒泡,便是希望只触发子组件绑定的事件,不要网上继续冒泡执行,此时在addEventListener函数里面加上一句:

ev.stopPropagation();

便会阻止程序的继续冒泡,当然,如果加在捕获阶段,也是可以终止的。

本文章是廖雪峰教程的读书笔记,有任何疑惑请参考廖雪峰教程:
https://www.liaoxuefeng.com/wiki/1022910821149312/1023022332902400

【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性、DOM增删改查 DOM,全称是:Document Object Model,文档对象模型,它主要是用于描述HTML文档对象的。一个HTML页面是由许多的标签组成的,例如:html、head、body、div等等标签元素,JS里面将整个的HTML作为一个document文档来进行管理,其中HTML里面的每一个标签都是一个DOM结点。HTML里面所有的DOM结点构成了一颗DOM树,这就有点类似于二叉树了,只不过DOM里面的树是多叉树,因为HTML里面的标签里面可以嵌套许多其他的标签。... 阅读详情

相关推荐

Agent框架系列:1-低代码智能体平台深度解析Dify、Coze、n8n

Dify、Coze 和 n8n 是三大主流低代码智能体平台,各有侧重。Dify 适合企业级 AI 应用,具备强大的 RAG 和知识库管理能力,技术栈为 Python + React。Coze 由字节推出,主打零代码和快速原型开发,集成 60+ 插件,极适合非技术用户。n8n 以工作流自动化和系统集成为核心,支持 400+ 外部应用,基于 Node.js + Vue,扩展性极强。选择建议:非技术团队选 Coze,AI 应用选 Dify,复杂自动化与集成选 n8n。可根据实际需求混合使用,最大化平台优势。

3088

id模糊选择器 js_常见的原始JS选择器使用方法总结

常见的getElementById,getElementsByName,getElementsByTagName。但外国人不满意这些API,于是搞出了getElementsByClassName,后来一点点又出现了jQuery选择器,这里只说原始js选择。1.getElementById这是最常用的选择器,通过id来定位:例:var test=document.getElementById("te...

weixin_39631350的博客 1208

微波射频学习笔记18-------偶极子天线和微波天线设计介绍

几种天线设计方法的介绍 一、偶极子天线 1.天线模型 两根紧挨着的金属导体,长度均为四分之一波长,直径均远小于波长,两导体间距也远小于波长。 2.天线性能的设计因素 ① 单个导体长度L:(光速/频率)/4=四分之一波长(在空气中传播的波长),但在导体中传播,波长会变短; ② 导体半径R:远小于波长即可,使用导电率高些的材料,市面上常见直径零点几毫米就挺好,或者用波长/200,得出一个小200的值,也算远小于波长; ③ 两导体间距S:远小于波长即可,可以比半径更小点。 以上三个变量L、R、S,均可在仿真软件

Sil_sprout 1万+

document.getElementsByClassName 的理想实现

各种实现方式 Pure DOM 通常先使用getElementsByTagName("*")取出文档中所有元素,然后进行遍历,使用正则表达式找出匹配的元素放入一个数组返回。由于IE5不支持document.getElementsByTagName("*"),要使用分支document.all以防错误。 The Ultimate getElementsByClassName方案,作者为Robe

jq 2272

angular中访问本地json文件

先在assets文件夹下写一个json文件,这样在打完包之后也可以手动修改json文件内容 1、在需要访问本地json文件的ts文件里面引入 import{HttpClient}from'@angular/common/http'; 2、用ajax请求调用,我这里是用已经封装好的ajax请求调用 gethttp = ()=>{ var self = this self.ajax.getAjax("../../assets/server.json","g...

蜗牛~~ 1830

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

$("#test") 与 document.getElementById("test') 不一样 !

$("#test") 与 document.getElementById("test') 是不是等价 ???? 原来一直以为$("#test") 与 document.getElementById("test') 是等价的。 遇到了scrollTop 后发现,自己的想法,知识如此的 局限,像井底之蛙。 先说scrollTop,这个属性,置匹配元素的滚动条的垂直位置。当scrollTop=0的时

lx_zheng的专栏 1026

利用pytorch长短期记忆网络LSTM实现股票预测分析

长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。LSTM主要就是加入了三个门控:第一个开关遗忘门:负责控制继续保存长期状态c;第二个开关输入门:负责控制把即时状态输入到长期状态c;第三个开关输出门:负责控制是否把长期状态c作为当前的LSTM的输出。

优快云 精品推荐 1万+

【JavaScript】十、DOM树和DOM对象

看下图,const要求变量里存的值不能发生更改,但对引用数据类型来说,变量存的值是内存地址,往数组添加新元素或者更改对象属性值,其内存地址并没有变,这一点,和Java中的final关键字修饰一个对象一样,不能再指向一个新的内存地址,但对象的属性值仍然可以随意修改。DOM,Document Object Model,文档对象模型,是用来操作HTML或者XML的API,直白说,DOM树,指将 HTML 文档以树状结构直观的表现出来,它直观的。以下,let可以换const,因为变量中存的是内存地址。

llg___的博客 1007

【ESP 保姆级教程】第三方库篇 ——TimeLib库,一个非常Nice的时间库,结合第三方进行校正时间

Time,这是一个为Arduino提供时间支持的库。 这个库的例子中会教会我们多种方式去获取时间: - 一个`RTC`时钟 - 网络`NTP`时间 - `GPS`时间

单片机菜鸟哥的博客 3674

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。

@优快云盲敲代码的阿豪的博客 946

【亲测免费】 Vanilla JS DOM 项目教程

Vanilla JS DOM 项目的目录结构相对简单,主要包含以下几个部分: ``` vanilla-js-dom/ ├── index.html ├── src/ │ ├── main.js │ └── utils.js ├── styles/ │ └── main.css └── README.md ``` ### 目录结构介绍: - `index.html`: 项目的主页面

gitblog_00131的博客 875

ubuntu20 安装px4、mavros、QGroundControl

首先安装一下ant,否则没法运行,同时因20.04的缺少动态库libawt_xawt.so无法被Java8给调用,我的解决办法是去18.04把18.04的相同路径下的动态库libawt_xawt.so移动到20.04的/usr/lib/jvm/java-11-openjdk-amd64/lib/路径中。用rosdepc的时候,你得确保你用的是鱼香ROS的提供的ROS安装方法,否则是没有rosdepc的。make px4_sitl gazebo之前,可以安装一下gazebo的 模型。二、安装MAVROS。

qq_58060770的博客 3349

JS(JavaScript)的DOM操作

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 十步杀一人,千里不留行。 事了拂衣去,深藏身与名。 ——《侠客行》 文章目录DOM操作1. DOM介绍2. 查询操作2.1 查询方法2.2 查询示例2.2.1 根据id获取dom2.2.1.1 示例2.2.1.2 结果2.2.2 根据tag获取dom2.2.2.1 示例2.2.2.2 结果2.2.3 根据css样式获取dom2.

感谢阅读 1739

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JavaScript——DOM编程、JS的对象和JSON

JavaScript——DOM编程、JS的对象和JSON

雷神乐乐的博客 1546

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

DOM【JavaScript】

在JavaScript中,DOM (Document Object Model:文档对象模型) 是web页面的编程接口,用于表示和操作 HTML 和 XML 文档。它将文档结构化为一个树形结构,允许开发者通过 JavaScript 访问和修改网页的内容、结构和样式。

2302_77228054的博客 2099

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaScript基础之十JavaScript的DOM操作

其他类型可以查看MDN文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType。

LUFANZHENG的专栏 446

js系列教程7-DOM操作全解

全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算法全解 js系列教程6-BOM操作全解 js系列教程7-DOM操作全解 js系列教程8-事件全解 js系列教程9-表单元素全解 js系列教程10-canvas绘图全解 js系列教程

5137

JavaScript 操作 DOM

js的DOM操作

2401_83194362的博客 1672

【JavaScript 教程】DOM——概述

作者 | 阮一峰DOMDOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 J...

web前端开发 594

探索 Vanilla JS DOM:纯JavaScript的DOM操作库

在前端开发中,我们常常依赖于诸如jQuery或Vue.js等库来处理DOM(文档对象模型)操作。然而,随着浏览器原生API的日益成熟,使用原生JavaScript进行DOM操作变得更为高效且简洁。 是一个轻量级的项目,旨在提供一套实用的工具函数,帮助开发者用纯JavaScript更方便地操作DOM。 ## 项目简介 Vanilla JS DOM 是一个由 开发的小型库,它封装了一些常见的DOM

gitblog_00087的博客 725

JavaScript学习笔记(十):JS HTML DOM

1、DOM 简介 通过 HTML DOM,JavaScript 能够访问和改变 HTML 文档的所有元素。 JavaScript HTML DOM 2、JavaScript - HTML DOM 方法 HTML DOM 方法是您能够(在 HTML 元素上)执行的动作。 HTML DOM 属性是您能够设置或改变的 HTML 元素的值。 document.getElementById("demo").innerHTML = "Hello World!"; getElementById 是方法

wz_1992的博客 513

JavaScript之DOM

DOM,全称Document Object Model文档对象模型。JS中通过DOM来对HTML文档进行操作。只要理解了DOM就可以随 心所欲的操作WEB页面,改变页面的内容、结构、样式。

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 1302

JavaScript — DOM API

前言: JS 分为三大部分,之前已经学习了ES(基础语法部分),本篇来讨论第二部分:DOM API — 操作页面结构 DOM APIDOM 概念事件基本概念时间三要素JS 代码主要流程获取页面元素querySelector & querySelectorAll操作元素获取 / 修改元素内容innerTextinnerHTML获取 / 修改元素属性获取 / 修改样式属性获取 / 修改表单元素属性操作节点新增节点1.创建元素节点2.插入节点到 DOM 树中删除节点 DOM 概念 DOM (Docu

一朵花花 1256

JavaScript DOM编程

目录 一、什么是DOM? 二、动态改变文档内容的原理 三、Element常用属性 四、常用方法 1.创建和增加节点的方法 2.删除和替换节点的方法: 3.其他方法 五、使用JS操作表格 总结: 一、什么是DOM? 文档对象模型(Document Object Model) 通过DOM可以动态改变文档内容 二、动态改变文档内容的原理 解析文档(如HTML)并生成DOM树 通过DOM标准接口+编程语言改变文档内容 解析文档生成DOM树的过程 .

weixin_62270300的博客 967

js--JavaScript与DOM之间的关系

前言 内容 类型简介 js中数字是浮点类型,而且是不精确的类型 字符串 json案例 数组 构造方法域对象 构造方法是原型继承的载体 构造方法 实现步骤 添加成员 js支持动态成员 类型的转换与包装对象 基本类型的转换 数字转字符串 字符串转数字 转化成boolean 包装类型 常用对象 正则表达式 元字符 基本元字符 限定元字符: 首位元字符: 简写元字符: 在JavaScrip...

罗俊 1017
上一篇: Javascript教程十——事件循环机制
下一篇: Vue教程十二——虚拟DOM
ruby___ruby
博客等级 码龄9年 2粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值