1.背景介绍
什么是DOM?

DOM全称是Document Object Model(文档对象模型),是为HTML和XML提供的API。那么为什么DOM可以同时提供给HTML和XML编程接口。虽然他们用来标记的标签不同,但是他们本质的结构是相同的。换句话说,按照DOM的标准,HTML和XML都是以标签为结点构造的树结构,DOM将HTML和XML的相同的结构本质抽象出来,然后通过脚本语言,如Javascript,按照DOM里的模型标准访问和操作文档内容。

在Chrome浏览器端,单击右键打开View Page Source展示文档结构。通过这种方式可以直观的看到文档当前的内容和结构。DOM则不同,它是提供一个API给编程语言,比如Javascript,通过一系列抽象的方法操作文档的内容,结构和样式。

官方介绍结束,现在用人话来理解:

在现实世界里,我们对所谓的’世界对象模型’都不会陌生,例如,当用’汽车’、'房子’和’树’等名词来称呼日常生活环境里的事物时,我们都可以百分百的肯定对方知道我们说的是什么,这是因为人们在对这些名词所代表的的东西有着相同的认知。于是,当对别人说"汽车停在车库里"时,可以断定他们不会理解为"小鸟关在壁橱里"等别的含义。

我们的"世界对象模型"不进可以用来描述客观存在的事物,还可以同来描述抽象概念。

例如,假设有个人想我问路,而我给出的答案是"左边第三栋房子",这个答案有没有意义取决于那个人能够理解"左边"和"第三"的含义。如果他不会数数或者分不清左右,则不管他是否理解这几个概念,我的回答对他都不会有任何的帮助。在现实世界中,正是因为大家对抽象的"世界对象模型"有着基本的共识,人们才能用非常简单的话来表达出复杂的含义并得到对方的理解。

2.知识剖析
刚刚提到了节点。那么节点这个到底又是什么?

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

在现实世界中,一切事物都由原子构成。原子就是现实世界的节点。但是原子同样还可以进一步分解为更细小的亚原子微粒。这些亚原子微粒同样也是节点。

DOM也是同样的情况。文档是由节点构成的集合,只不过此时的节点是文档树上的树枝和树叶而已。

在DOM中有许多不同类型的节点。就像原子包含着亚原子微粒那样,也有很多类型的DOM节点包含着其他类型的节点。接下来我们先看看其中的三种:元素节点、文本节点和属性节点。

那么,DOM是由什么组成?

对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、与平台无关的标准接口规范。

DOM定义了HTML文档和XML文档的逻辑结构,给出了一种访问和处理这两种文档的方法。文档代表的是数据,而DOM则代表了如何去处理这些数据。

作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML接口和XML接口。(至于XML和HTML区别是啥,你可以理解为两种不同的语言,但是很相似。作用不一样。XML更多用于数据传输设计,HTML更多用于数据的展示模块)

核心部分是结构化文档比较底层对象的集合,这一部分所定义的对象已经完全可以表达出任何HTML和XML文档中的数据了。

HTML接口和XML接口两部分则是专为操作具体HTML文档和XML文档所提供的高级接口。

DOM树(丑图,摘自红宝书)

2.知识剖析
DOM的四个基本接口

在DOM接口规范中,有四个基本的接口:Document, Node, NodeList, NamedNodeMap。

Document:Document接口是对文档进行操作的入口,它是从Node接口继承过来的。

Node:Node接口是其他大多数接口的父类。 在DOM树中,Node接口代表了树中的一个节点。

常见的DOM操作

1.查找节点

document.getElementById('id属性值'); 返回拥有指定id的第一个对象的引用document/element.getElementsByClassName('class属性值'); 返回拥有指定class的对象集合document/element.getElementsByTagName('标签名'); 返回拥有指定标签名的对象集合document.getElementsByName('name属性值'); 返回拥有指定名称的对象结合document/element.querySelector('CSS选择器'); 仅返回第一个匹配的元素document/element.querySelectorAll('CSS选择器'); 返回所有匹配的元素document.documentElement; 获取页面中的HTML标签document.body; 获取页面中的BODY标签document.all['']; 获取页面中的所有元素节点的对象集合型

2.创建节点

document.createElement('元素名'); 创建新的元素节点document.createAttribute('属性名'); 创建新的属性节点document.createTextNode('文本内容'); 创建新的文本节点document.createComment('注释节点'); 创建新的注释节点document.createDocumentFragment( ); 创建文档片段节点

3.删除节点

parentNode.removeChild( existingChild );删除已有的子节点,返回值为删除节点element.removeAttribute('属性名');删除具有指定属性名称的属性,无返回值element.removeAttributeNode( attrNode );删除指定属性,返回值为删除的属性

4.修改节点

parentNode.replaceChild( newChild, existingChild );用新节点替换父节点中已有的子节点element.setAttributeNode( attributeName );若原元素已有该节点,此操作能达到修改该属性值的目的element.setAttribute( attributeName, attributeValue );若原元素已有该节点,此操作能达到修改该属性值的目的

5.插入节点

parent.appendChild( element/txt/comment/fragment );向父节点的最后一个子节点后追加新节点parent.insertBefore( newChild, existingChild );向父节点的某个特定子节点之前插入新节点element.setAttributeNode( attributeName );给元素增加属性节点element.setAttribute( attributeName, attributeValue );给元素增加指定属性,并设定属性值

6.设置样式

ele.style.styleName = styleValue;设置ele元素的CSS样式

7.更多讨论

(1)鼠标事件有哪些?

1、onclick 事件——当用户点击时

2、onload 事件——用户进入

3、onunload 事件——用户离开,如刷新页面,提交表单,关闭窗口,关闭浏览器时触发(这个事件在Chrome和Opera浏览器里并不支持)

4、onmouseover事件——鼠标移入

5、onmouseout事件——鼠标移出

6、onmousedown事件——鼠标按下

7、onmouseup 事件——鼠标抬起

(2)如何获取相邻的节点?

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

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

(3)可以复制节点么?

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

参数:是否复制原节点的所有属性

常见的DOM操作方式有哪些相关推荐

  1. 常见的DOM操作有哪些

    这里是修真院前端小课堂,本篇分析的主题是 [常见的DOM操作有哪些] 这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文 ...

  2. javascript中五种常见的DOM方法

    getElementById将返回一个与那个有着给定id属性值的元素节点对应的对象. <html xmlns="http://www.w3.org/1999/xhtml"&g ...

  3. 【React组件】写一个模仿蓝湖的图片查看器

    前言 最近公司让写一个可以自由拖拽放大的图片查看器,我寻思这还不简单,一顿操作猛如虎,俩小时后: 事实证明,一旦涉及到 DOM 的变换操作,如果很多细节考虑不全,抓过来就写,那基本就凉了.于是我仔细分 ...

  4. 【前端学习笔记DOM—DOM常见操作】

    目录 前言 一.什么是DOM 二.常见的DOM操作 1.增 (1)新建 (2)插入 2.删 (1)删除子节点 (2)删除属性节点 3. 改 (1)替换节点 (2)修改属性值 4. 查 (1)通过id属 ...

  5. 常见Dom操作有哪些?

    这里是修真院前端小课堂,本篇分析的主题是 [ 常见Dom操作有哪些?] 大家好,我是IT修真院深圳分院第02期学员,一枚正直善良的web程序员. 今天给大家分享一下,修真院官网JS任务2中常见DOM操 ...

  6. JavaScript中BOM及DOM的学习

    JavaScript中BOM及DOM的学习 文章目录 JavaScript中BOM及DOM的学习 1 BOM编程 1.1 BOM编程概述 1.1.1 BOM编程的概念 1.1.2 BOM编程的作用 1 ...

  7. 从各大跨平台技术说开去,我们真的需要虚拟 DOM 吗?

    前言 你有没有留意到?优秀的解决方案思想都是相通的:当你研究 Flutter 渲染原理时会发现 Flutter Rendering 层类似于 React 中的虚拟 DOM,当你去看 Weex 工作原理 ...

  8. javaScript的使用(5)DOM事件

    dom事件 浏览器监听特定的条件或用户行为,并且触发相应的操作(函数) 常见的dom事件如下: onclick:单击事件 onfocus:焦点事件 onblur:失去焦点事件 onkeydown:键盘 ...

  9. javascript --- [虚拟DOM] 初始化 实现

    说明 本篇主要说明为什么要使用虚拟DOM技术,以及如何实现简单的虚拟dom 您将会学到: 1.原生JS对DOM的操作 2.虚拟DOM的相关概念 3.DIFF算法的基础概念 为什么提出 -> DO ...

最新文章

  1. 读取txt里面的数据进行计算
  2. php 去除中英文空格,php去除字符串首尾中英文空格程序-PHP源码
  3. 【Network】Neutron-Docker-K8S
  4. ajax从mysql提取数据在html中_Python骚操作,提取pdf文件中的表格数据!
  5. hdu 1892二维树状数组
  6. SpringBatch 读取xml文件(StaxEventItemReader)用法(十三)
  7. 人工神经网络_用人工神经网络控制猴子大脑,MIT科学家做到了
  8. char[]和char*的区别(转)
  9. 我来说说java的NIO
  10. 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
  11. api postmain 鉴权_API授权与验证 - 文档中心 - 快代理
  12. SAS数据挖掘实战篇【五】
  13. htaccess 是什么
  14. php 当前文件的文件夹大小,PHP获取文件夹大小函数用法实例
  15. 从0到1搭建小米商城首页
  16. GIS 矢量数据 编码方式
  17. Mars3D中 popup 弹窗问题汇总
  18. 遍历二维数组(从外向内绕圈)
  19. 新型信用卡MasterPass
  20. Java小写金额转换大写与金额比对(支持繁体大写金额)

热门文章

  1. 【算法】海量数据相似度计算之simhash和海明距离
  2. python根据输入数字输出对应的星期几
  3. camera android 5.1,图库+下载-Camera Gallery Pro v5.1.1_手机乐园
  4. 报表统计财务计算是计算机在哪个方面的应用,统计和会计有什么区别
  5. 使用frps和frpc实现内网穿透
  6. mybatis快速入门
  7. 用python来爬取网络小说
  8. jar包查找groupid、artifactid
  9. 欢迎制造业同行加入非商业联合开发俱乐部群106930856
  10. Python第三方cv2库介绍