JS WEB API DOM

DOM概念

浏览器把网页,网页中的内容描述成对象,这些对象称为节点;(浏览器把内容的特征描述成对象的属性)——网页的内容:标签、文本、注释(都称为节点、标签也叫元素)

DOM对象:浏览器把页面中的所有内容都逐个翻译为对象,把内容的特征翻译成对象的属性;
DOM树:DOM对象之间按照层级结构相互关联,形成的树状结构称为DOM树;

元素的属性 – 标签被翻译成对象,标签的特征被翻译成对象的属性;

页面元素获取的几种方法

1.根据ID获取 - document.getElementById('id名');–返回值是一个元素、一个DOM对象,此方法前置必须是document
2.根据标签名获取 - 元素.getElementByTagName('标签名');–返回值是元素的集合,一个伪数组,使用时要加索引值;
3.特殊元素的获取 - 整个页面文档 document、html document.documentElement、body document.body

4.H5新增方法
根据类名获取 - 元素.getElementsByClassName('类名') 返回值是一个伪数组
根据css选择器获取 - 元素.querySelector('css选择器')元素.querySelectorAll('css选择器')

事件

事件三要素–事件源(事件发生的主体)、事件类型、事件处理程序(事件发生时执行的操作、事件处理程序中使用this 指向的是事件源)

事件类型在这里插入图片描述
注册事件(绑定事件)的方式

事件源.事件类型 = 事件处理程序

事件的执行方式 – 注册事件时,事件处理程序不会执行;当满足事件触发条件时,才会执行处理程序;

innerHTML 和 innerText 的区别

innerHTML识别HTML标签,保留空格和换行,是W3C标准语法;
innerText不识别HTML标签,不保留空格换行,不是标准语法;

标签的自定义属性

标签的自定义属性不会被翻译成元素的属性;

操控标签属性的方法:
获取:DOM对象.getAttribute(属性名)
设置:DOM对象.setAttribute(属性名,属性值)
删除:DOM对象.removeAttribute(属性名)

H5新增的自定义属性
date-开头的自定义属性
规则:
以data-开头的标签自定义属性,都会记录到元素的dataset中;
在元素的dataset属性中添加自定义属性,也会被反映到标签上;

操作方法:
获取:元素.dataset.自定义属性名;
注意:这个自定义属性名是去除data-之后的部分,在js中使用驼峰命名法书写
设置:元素.dataset.自定义属性名 = 属性值;
添加:元素.dataset.新属性名 = 属性值;
删除:delete 元素.dataset.属性;

节点

概念:浏览器把页面中的内容描述成对象,这个对象就叫做节点(DOM对象){又分为标签节点(元素)、文本节点、注释节点}

通过节点属性获取节点
父代 – 获取父节点:parentNode (获取到的肯定是标签节点、是一个元素)

子代 – 获取所有子元素:children (获取到的是一个元素的集合)
获取第一个子元素:firstElenmentChild
获取最后一个子元素:lastElenmentChild

兄弟 – 获取上一个兄弟元素:previousElenmentSibling
获取下一个兄弟元素:nextElenmentSibling

获取所有子节点 : childNodes
获取第一个子节点:firstChild
获取最后一个子节点:lastChild
获取上一个兄弟节点:previousSibling
获取下一个兄弟节点:nextSibling
[这五种方法获取到的节点包括文本节点和注释节点、不常用]

创建节点
createElenmet
调用方式 document.createElenment(标签名);
返回值:一个标签节点,可以按照标签节点的方式来操作
注意:这个方法只能创建节点,不引入是不会显示在页面中
此方法只能被document调用;

innerHTML 赋值为一个具有标签格式的字符串,浏览器会把当前字符串中的内容翻译为标签;

插入节点
appendChild
使用方式:父元素.appendChild(要插入的节点); 会把节点插入到父元素的最后一个子节点位置;

insertBefore
使用方式:父元素.insertBefore(新节点,参考节点); 把新节点插入到参考节点的前面;

删除节点
removeChild
使用方式:父元素.remove(要删除的子元素); 注意:子元素只能被父元素删除

remove
使用方式:要删除的元素.remove(); 括号里不写参数,此方法是删除自己;

克隆节点
cloneNode
使用方式:被克隆的元素.cloneNode(参数);
如果参数是true,表示将当前元素及其内容一起复制;
如果参数是false或没有参数,则只复制当前元素;

创建元素的三种方式

一、document.write() 缺点:页面加载完成之后再调用此方法会把这个页面内容覆盖、所以不要使用;
二、innerHTML(会把标签格式的字符串识别为标签)
效率的问题:当给一个DOM对象的innerHTML对象赋值时,会有两步–1.字符串赋值;2.重新渲染整个页面(这一步很消耗时间)所以使用innerHTML时,应先将字符串拼接好之后,再去进行innerHTML赋值;
三、createElement
语法:

document.createElement('标签名');

注册事件的几种方式

一、传统方式
注册事件事件源.on事件类型 = 事件处理程序 --- eg : box.onclick = function();
弊端:不能重复注册,如果重复的话,后面的会将前面的覆盖;
删除事件元素.on事件类型 = null;

二、事件监听
注册事件事件源,addEventListener(事件类型,事件处理程序);注意:此处事件类型前面不加on
使用addEventListener的第三个参数 – true在捕获阶段执行、false或不写 在冒泡阶段执行;
注意:1.通过事件监听可以为同一个元素注册多个相同事件;
2.先注册的事件先执行;
3.如果注册的事件要解绑,事件处理程序必须写为函数名;
删除事件事件源.removeEventListener(事件类型,事件处理程序);注意:此处事件处理程序只能写函数名;

事件的三个阶段

1.捕获阶段:从上到下,直到事件源停止;
2.目标阶段:执行事件源的事件处理程序;
3.冒泡阶段:从下往上,知道window(可以理解为document、但实际上是window)停止;
注意:默认状态下,事件再冒泡阶段触发
修改事件的执行阶段:
使用addEventListener的第三个参数 – true在捕获阶段执行、false或不写 在冒泡阶段执行;

事件对象

概念:事件对象包含了事件触发的时候的事件相关信息 – 就是一个对象
因为编程的时候,想要根据这些事件的状态信息来做一些逻辑判断,所以需要学习事件对象。

获取事件对象的方法
主流浏览器:在事件处理函数中传入形参(浏览器在调用事件处理函数的时候,会传入一个实参,这个实参就是事件对象)
ie678:window.event – 兼容写法:形参 || window.event

事件对象的内容
属性:
target 事件目标、真正触发事件的源头 ------ 注意:this——事件源(事件给谁绑定的,this就是谁)

鼠标坐标:clientX/Y 触发事件时鼠标相对于浏览器可视区域的坐标
PageX/Y 触发事件时鼠标相对于页面的坐标
screenX/Y 触发事件时鼠标相对于显示器的坐标

方法:
preventDefault 阻止浏览器默认行为(a标签点击跳转页面、提交按钮点击提交表单)
stopPropagation 阻止事件冒泡

事件委托

给上层标签绑定事件,让下层标签触发(事件冒泡) – 让上层标签代替下层标签绑定事件
优点:1.减少了事件绑定的次数;2.为未来标签绑定预定事件(新元素也可以通过事件冒泡让上层标签的事件执行)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值