DOM知识总结

获取DOM元素、修改属性

获取DOM对象的方式

document.querySelector

获取满足条件的第一个,有且只有一个。可以直接操作。

document.querySelectorAll

获取的是满足条件的所有DOM对象,返回的是一个集合。无法直接操作,必须通过下标才能操作。

其他方式

  • document.getElementById():根据标签的id属性获取元素
  • document.getElementsByTagName():根据标签名称获取元素集合

修改元素内容

DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。即可操作对象使用的点语法。

  • innerText:只关注内容,不关注标签(不明确数据安全的情况下,建议用innerText
  • innerHTML:可以解析标签

修改元素属性

修改常用属性

titlehrefsrc

修改元素样式属性

style操作css

  • 每个DOM对象都有一个style属性,style属性的值是一个对象,里面存储了所有行内样式对应的键值对。
  • 如果样式的名字带了-,如background-color,在style对象中,呈现的是驼峰命名法backgroundColor(因为在js中,-会被解析成减号)
  • style样式只能获取和设置行内样式,在类样式中定义的样式通过style获取不到。

操作类名 className

  • 由于class是关键字,所以使用className去代替。
  • className是使用新值替换旧值,如果需要添加一个类,需要保留之前的类名。

classList

  • 添加:add(class1, class2, ...)
  • 删除:remove(class1, class2, ...)
  • 切换:toggle(class)

className、style和classList间的区别

  • className修改大量样式更方便
  • style修改少量样式更方便
  • classList追加和删除不影响之前的类名

修改表单属性

  • 正常有属性有取值的,与其他标签属性没有区别
  • 表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示,如果为true表示添加了该属性,false表示移除了该属性。
  • 常见表单属性有value、disabled、checked、selected等

定时器

间隔一段时间之后重新执行对应的代码

创建定时器

清楚定时器

注意:

  • 定时器需要等待,所以后面的代码先执行
  • 每一次调用定时器,都会产生一个新的定时器

事件基础

能给元素添加事件,并利用事件做常见的网页交互效果。

事件

发展历史

  • DOM L0:DOM发展的第一个版本
  • DOM L1:DOM级别1于1998年10月1日称为W3C推荐标准
  • DOM L2:使用addEventListen注册事件
  • DOM L3:DOM3级事件模块在DOM2级事件的基础上重新定义了这些事件,也添加了一些新的事件类型

事件监听

分别有以下几个内容:

  • 事件源
  • 事件类型
  • 事件处理函数

常见的事件类型

  • 鼠标事件:click, mouseenter,mouseleave
  • 焦点事件:fouce, blur
  • 键盘事件:keydown, keyup
  • 文本事件:input

注意点:

  1. 事件处理函数不会主动执行,必须触发才会执行,触发一次就会执行一次
  2. 事件处理函数里面的内容最后执行

高级函数

可以被简单理解为函数的高级应用,JavaScript 中函数可以被当成值来对待。

函数表达式:把函数当值赋值给变量

回调函数:把函数作为参数传递给另外一个函数(如定时器函数)

环境对象

环境对象指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境。(谁调用函数,this就指向谁)

节点操作

针对标签本身的增删改查

查找节点

有明确的亲戚关系的时候,查找节点更加方便

  • 父级:parentNote
  • 子级:children(返回伪数组)
  • 兄弟:nextElementSibling、previousElementSibling

增加节点

创建新节点

追加节点

  • parent.appendChild(child):将child的元素添加到parent元素里面,添加到最后面
  • parent.insertBefor(child, refChild):将child元素添加到refChild的前面,如果refChild元素获取不到,则默认以appendChild形式添加

克隆节点

克隆节点时,需要页面上有一个模板节点。布尔值为false,浅拷贝;true为深拷贝。

删除节点

事件高级

事件流

经历事件捕获、事件目标阶段和事件冒泡的整个完成的过程就是事件流。实际上都以时间冒泡为主。

事件捕获

从DOM的根元素开始去执行对应对应的事件(从外到里)

捕获机制必须使用事件监听的形式注册

事件冒泡

当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡。

事件冒泡的必要性:如果没有冒泡,给大盒子注册点击事件,点击里面的小盒子时,则会导致大盒子的点击事件无法执行。

阻止冒泡

阻止事件冒泡

  1. 先要明确哪一块区域不能冒泡
  2. 需要阻止什么事件传递就给这块区域的最大盒子注册该事件
  3. 在事件处理函数里面接受事件对象,并添加e.stopProgagation()

阻止冒泡方式

  • e.stopProgagation():阻止事件冒泡
  • e.preventDefault():阻止链接、表单域的跳转

事件注册的两种方式区别

传统on注册:

  • 同一个对象,后面注册的同类事件会覆盖前面的事件
  • 直接使用null覆盖就可以实现解绑
  • 都是冒泡阶段执行的

事件监听注册:

  • 语法:addEventListener(事件类型, 事件处理函数, 是否使用捕获)
  • 后面注册的事件不会覆盖前面的同类事件
  • 可以通过第三个参数确定是在冒泡还是捕获阶段执行
  • 必须使用removeEventListener(事件类型, 事件处理函数, 获取捕获或者冒泡阶段),匿名函数无法被解绑

事件委托

指的是自己不注册事件,将对应的事件注册给祖先元素

可以减少事件的注册,提高效率

网页特效篇

页面滚动事件和页面加载事件

页面滚动事件

滚动条在滚动的时候持续触发的事件

加载事件

加载外部资源(如图片、外联CSS和JavaScript等)加载完成时触发的事件

当初始的HTML文档被完全加载和解析完成之后,DOMContentLoaded事件被触发,而无需等待样式表、图像等完全加载

元素大小和位置

srcoll家族

  • scroll事件
  • scrollTop、scrollLeft:获取滚动被卷去的大小

offset家族

获取出来的是数值,方便计算。只读属性。

可视宽高属性:(获取的是可视宽高,如果盒子是隐藏的,获取的值则为0)

  • offsetWidth
  • offsetHeight

元素位置属性:(获得最近带有定位的父亲)

  • offsetTop
  • offsetLeft

client家族

给window注册的事件

属性有以下几个:

  • clientWidth
  • clientHeight
  • clientTop
  • clientLeft

原创文章,作者:seabert,如若转载,请注明出处:https://bysjb.cn/dom.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注