常用的DOM操作

1.背景介绍

DOM(文档对象模型)

DOM是针对于HTML和XML文档的一个API(应用程序编程接口)。是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

在DOM中,可以将任何HTML或者XML的文档描绘成一个由多层节点构成的结构

2.知识剖析

节点这个词是一个网络用语,代表了网络中的一个连接点。一个网络就是由一些节点构成的集合。

DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子。

节点的类型有七种。 
Document:整个文档树的顶层节点 
DocumentType:doctype标签 
Element:网页的各种HTML标签 
Attribute:网页元素的属性 
Text:标签之间或标签包含的文本 
Comment:注释 
DocumentFragment:文档的片段

常见的DOM操作

查找DOM节点

1.id查找 document.getElementById() 
2.class查找 document.getElementsByClassName() 
3.标签查找 document.getElementsByClassName()

HTML DOM - 改变 HTML

修改 HTML 内容的最简单的方法是使用 innerHTML 属性

document.getElementById(id).innerHTML=新的 HTML

改变 HTML 样式

document.getElementById("p2").style.color="blue"

DOM事件

允许 JavaScript 对 HTML 事件作出反应 
onclick 事件——当用户点击时 
onload 事件——用户进入 
onunload 事件——用户离开 
onmouseover事件——鼠标移入 
onmouseout事件——鼠标移出 
onmousedown事件——鼠标按下 
onmouseup 事件——鼠标抬起

HTML DOM EVENTLISTENER

addEventListener() 方法用于向指定元素添加事件句柄。 
addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 
可以向一个元素添加多个事件句柄。 
可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。 
可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。 
addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 (如 "click" 或 "mousedown") 
第二个参数是事件触发后调用的函数。 
第三个参数是个布尔值用于描述事件是冒泡还是捕获,true则表示在捕获阶段调用,为false表示在冒泡阶段调用。

DOM二级事件

2级DOM的事件传播分三个阶段进行。 
1.capturing阶段,事件从Document对象沿着文档树向下传播给节点。如果目标的任何一个祖先专门注册了事件监听函数,那么在事件传播的过程中就会运行这些函数。 
2.下一个阶段发生在目标节点自身,直接注册在目标上的适合的事件监听函数将运行。 
3.是bubbling阶段,这个阶段事件将从目标元素向上传播回Document对象(与capturing相反的阶段)。虽然所有事件都受capturing阶段的支配,但并不是所有类型的事件都bubbling。(0级DOM事件模型处理没有capturing阶段) 
即1:事件捕获, 2:处于目标阶段, 3:事件冒泡阶段

3.常见问题

如何阻止事件冒泡?

4.解决方案

使用event.stopPropagation( );

另一种方式是通过event.target, target指向了触发事件的那个具体对象. 可以使用 if(event.target==this){ //语句 }

5.编码实战

6.扩展思考

7.参考文献

1.JavaScript高级程序设计

2.head first JavaScript

8 更多讨论

通过getElementsByClassName这种获取的节点集合如果进行操作?

由于获取的是collection集合,它具有数组的length属性但是并不是数组。需要将他转换为数组才可以使用数组专用的方法。

使用array.from()方法可以将获取的集合转化为数组

如何获取相邻的节点?

neborNode.previousSibling :获取已知节点的相邻的上一个节点

nerbourNode.nextSlbling: 获取已知节点的下一个节点

可以复制节点么?

cloneNode(true | false);复制某个节点

什么是文档碎片?

createDocumentFragment() 用来创建文档碎片节点。 

文档碎片节点是若干DOM节点的集合,可以包括各种类型的节点,如 元素节点、文本节点、注释节点 等。文档碎片节点在创建之初是空的,需要向它添加节点。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值