DOM(文档对象模型)学习

DOM(文档对象模型)学习

目录
一、DOM简介
  1. 什么是DOM?
  
2. DOM树
二、事件基础
  1. 事件概述
  
2. 执行事件的步骤
三、获取元素
  1. 根据ID获取
  
2. 根据标签名获取
  
3. 通过HTML5新增的方法获取
  
4. 特殊元素获取
四、操作元素
  1. 改变元素内容
  
2. 常见元素的属性操作
  
3. CSS样式属性操作
  
4. 自定义属性操作
五、节点操作
  1. 节点概述
  
2. 节点层级
  
3. 创建节点
  
4. 添加节点
  
5. 删除节点
  
6. 复制节点
  
7. 三种动态创建元素的区别
六、注册事件
  1. 注册事件概述
  
2. 注册事件两种方式
  
3. addEventListener()事件监听方式
  
4. attachEvent()事件监听方式
七、删除事件
  1. 删除事件的方式
八、DOM事件流
  1. 概述
  
2. DOM事件流的三个阶段
九、事件对象
  1. 什么是事件对象?
  2. 常见事件对象的属性和方法
  3. 事件委托
  4. 常见的鼠标事件
  5. 常见的键盘事件

一、DOM简介

1. 什么是DOM?

 文档对象模型,是W3C组织推荐的处理可扩展标记语言的标准编程接口。

2. DOM树

在这里插入图片描述

  • 文档:一个页面就是一个文档,DOM中使用document表示。
  • 元素:页面中所有的标签都是元素,DOM中使用element表示。
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM中使用node表示。
  • DOM把以上内容都看作对象。

二、事件基础

1. 事件概述

 1. 事件三要素组成:

  事件源(事件被触发的对象)
  事件类型(触发什么事件)
  处理程序(通过一个函数赋值的方式完成)

2. 执行事件的步骤

 1. 获取事件源
 2. 注册事件(绑定事件)
 3. 添加事件处理程序(采取函数赋值形式)

三、获取元素

1. 根据ID获取

 使用getElementById()方法获取带有元素ID的元素对象。
注意:1. 因为文档页面从上往下加载,所以得先有标签,script 标签写在下面。
    2. 注意方法的写法是用驼峰命名法。
    3. 参数id是大E小敏感的字符串。
    4. 返回的是一个元素对象。

2. 根据标签名获取

 使用getElementByTagName()方法获取带有指定标签名的元素对象的集合。
注意:1. 返回的是获取过来的元素对象的集合(以伪数组的形式存储的)。
    2. 遍历,依次打印伪数组里面的元素。
    3. 如果只有一个元素,返回的还是伪数组的形式;一个元素都没有,返回的是空的伪数组。
    4. 可以获取某个元素(父元素)内部所有指定标签名的子元素:element.getElementByTagName(‘标签名’)。但要注意的是父元素必须是单个对象(必须指明是哪一个元素对象,不能用伪数组直接获取),获取的时候不包括父元素自己。

3. 通过HTML5新增的方法获取

1. document.getElementByClassName(‘类名’); //根据类名返回元素对象。
2. document.querySelector(‘选择器’); //根据指定选择器返回第一个元素对象,选择器里面 .类名 #id名。
3. document.querySelectorAll(‘选择器’); //根据指定选择器返回所有元素。

4. 特殊元素获取

1. document.body; //返回body元素对象。
2. document.documentElement; //返回html元素对象。

四、操作元素

1. 改变元素内容

1. element.innerText 属性
2. element.innerHTML 属性
区分: element.innerText:获取起始到终止的内容,不包括html标签、空格和换行。标准。
    element.innerHTML:获取起始到终止的全部内容内容,包括html标签、空格和换行。非标准。

2. 常见元素的属性操作

1. src,href
   eg: img.src = ’ ';
2. id,alt,title
3. type,value,checked,selected,disabled

3. CSS样式属性操作

1. element.style 行内样式操作
2. element.className 类名样式操作
注意: 1. JS里面的样式采取驼峰命名法,例如:fontSize,backgroundColor。
      2. JS修改style样式操作,产生的是行内样式,CSS权重比较高。
      3. 如果样式修改比较多,可以采取操作类名方式修改元素样式。
      4. class是个保留字,要用className来操作元素类名属性。
      5. className会直接更改元素类名,会覆盖原先的类名。
      6. 如果想要保留原先的类名,可以写成多类名选择器。

4. 自定义属性操作

1. 获取属性值 element.属性
            element.getAttribute(‘属性’);
区分:element.属性 是获取内置属性值。
   element.getAttribute(‘属性’); 主要获取自定义的属性。

2. 设置属性值 element.属性 = ‘值 ’;
            element.setAttribute(‘属性’);

3. 移除属性 element.removeAttribute(‘属性’);

五、节点操作

1. 节点概述

网页中所有内容都是节点,一般节点至少拥有nodeType、nodeName、nodeValue三个基本属性(元素节点nodeType为1,属性节点nodeType为2,文本节点nodeType为3)。

2. 节点层级

1. 父级节点:
node.parentNode //得到的是离元素最近的父级节点如果找不到,返回为null。

2. 子节点:
1) parentNode.childNodes(标准) //返回包含指定节点的子节点的集合,该集合为及时更新的集合。
注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。
如果只想要获得里面的元素节点,则需要专门处理(用到节点类型判断)
2) parentNode.children(非标准)
3) parentNode.firstChild //返回第一个子节点,找不到返回null。
4) parentNode.lastChild //返回最后一个子节点,找不到返回null。
5) parentNode.firstElementChild //返回第一个子元素节点,找不到返回null。
6) parentNode.firstElementChild //返回最后一个子元素节点,找不到返回null。IE9以上才支持
7) 实际开发中,写parentNode.children[0]/[…length-1]

3. 兄弟节点:
1. node.nextSibling //返回下一个兄弟节点(包括元素,文本节点),找不到返回null。
2. node.previousSibling //返回上一个兄弟节点(包括元素,文本节点),找不到返回null。
3. node.nextElementSibling //返回下一个兄弟节点(包括元素,文本节点),找不到返回null。IE9以上才支持
4. node.previousElementSibling //返回上一个兄弟节点(包括元素,文本节点),找不到返回null。IE9以上才支持

3. 创建节点

doucument.createElement(‘tagName’);

4. 添加节点

1. node.appendChild(child);
2. node.insertBefore(child,指定元素);

5. 删除节点

node.removeChild(child);

6. 复制节点

node.cloneNode( );
注意:
1.如果括号参数为空或者false,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。
2.如果括号参数为true,则是深度拷贝,会克隆复制节点本身以及里面的所有子节点。

7. 三种动态创建元素区别

1. document.write()
2. element.innnerHTML()
3. document.createElement()

区别:

  1. document.write()是直接将内容写进去,但是文档流执行完毕,则它会导致页面全部重绘。
  2. element.innnerHTML()是将内容写入某个DOM节点,不会导致页面重绘。
  3. element.innnerHTML()创建多个元素效率更高(采取数组形式拼接,不是字符串拼接),结构稍微复杂。
  4. document.createElement()创建多个元素效率更低,但是结构更清晰。
  5. 不同浏览器下,element.innnerHTML()比document.createElement()效率更高。

六、注册事件

1.注册事件概述

 给元素添加事件称为注册事件或者绑定事件。

2. 注册事件两种方式:

1. 传统注册方式:
1)利用on开头的事件如:onclick
2)特点:注册事件的唯一性
3)同一个元素同一个事件只能设置一个处理函数,最后注册的处理程序会覆盖先前的处理函数。

2. 方法监听注册方式:
1)W3C标准推荐方式
2)IE9及以上:addEventListener()
3)IE9以下:attachEvent()
4)特点:同一元素同一个事件可以注册多个监听器,按注册顺序依次执行

3. addEventListener()事件监听方式

eventTarget.addEventListener(type,listener[,useCapture]);

  • type: 事件类型字符串,比如click,mouseover,不带on。
  • listener: 事件处理函数,事件发生时,会调用该监听函数。
  • useCapture: 可选参数是一个布尔值,默认false。
4. attachEvent()事件监听方式

eventTarget.attachEvent(eventNameWithOn,callback);

  • eventNameWithOn: 事件类型字符串,比如onclick,带on。
  • callback: 事件处理函数,事件发生时,会调用该监听函数。

七、删除事件

1. 删除事件的方式

1. 传统注册方式:

eventTarget.onclick = null;

2. 方法监听注册方式:

1) eventTarget.removeEventListener(type,listener[,useCapture]);
2) eventTarget.detachEvent(eventNameWithOn,callback)
注意: 移除不能用匿名函数。

八、DOM事件流

1. 概述

事件发生时会在元素节点之间按照特定的顺序传播。

2. DOM事件流的三个阶段

1. 捕获阶段(从外到里)
2. 当前目标阶段
3. 冒泡阶段(从里到外)
注意:

  1. JS中代码只执行捕获或者冒泡其中的一个阶段。
  2. onclick和attachevent()只能得到冒泡阶段。
  3. addEventListener(type,listener[,useCapture])第三个参数如果是true,表示时间捕获阶段调用事件处理程序;如果是false,表示事件在事件冒泡阶段调用事件处理程序。
  4. 有些事件是没有冒泡的,如:onblur,onfocus,onmouseenter,onmouseleave。
  5. 事件冒泡有时候会带来麻烦,有时候需要阻止。

九、事件对象

1. 什么是事件对象?

1. eventTarget.onclick = function(event){};
2. eventTarget.addEventListener(‘click’,function(event){});

注意:

  1. event就是一个事件对象,写在侦听函数里面,当作形参来看。
  2. 事件对象只有有了时间才会存在,它是系统自己创建的,不需要我们传递参数。
  3. 事件对象是我们时间一系列相关数据的集合。
  4. 事件对象的名字可以自己命名。
  5. 事件对象也有兼容性问题,解决方法:e = e || window.event
2. 常见事件对象的属性和方法
1.
事件对象属性方法说明
e.target返回触发事件的对象(标准)
e.srcElement返回触发事件的对象(非标准,ie6-8)
e.type返回事件的类型,eg:click
e.stopPropagation()阻止冒泡(标准)
e.cancelBubble阻止冒泡(非标准,ie6-8)
e.preventDefault()阻止默认事件(标准)
e.returnValue阻止默认事件(非标准,ie6-8)
2. 阻止默认事件可以用return false;阻止。

特点:1. 没有兼容性问题。
   2. return 后面代码不执行。
   3. 只限于传统注册方式。

3. 事件委托
核心原理:给父节点添加侦听器,利用时间冒泡影响每个节点。
4. 常见的鼠标事件

1. contextmenu 禁止鼠标右键菜单
2. selectstart 禁止鼠标选中
3. 鼠标事件对象

鼠标事件对象说明
e.clientX返回鼠标相对于浏览器窗口可视区的X坐标
e.clientY返回鼠标相对于浏览器窗口可视区的Y坐标
e.pageX返回鼠标相对于文档页面的X坐标
e.pageY返回鼠标相对于文档页面的Y坐标
e.screenX返回鼠标相对于电脑屏幕的X坐标
e.screenY返回鼠标相对于电脑屏幕的Y坐标
5. 常见的键盘事件
1.
键盘事件触发条件
onkeyup某个键盘按键被松开时触发
onkeydown某个键盘按键被按下时触发
onkeypress某个键盘按键被按下时触发,但不能识别功能键
2.
键盘事件对象属性说明
keyCode返回该键的ASCII值
注意:onkeyup和onkeydown不区分字母大小写,onkeypress区分字母大小写并返回不同ASCII值。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值