DOM在前面的JavaScript学习笔记(一)–JS基础里简单提到过,它是浏览器厂商提供的用来控制html / css 的代码的文档对象模型,是JavaScript的重要组成部分,现在带大家详细了解一下什么是DOM。

基本概念

DOM的全称是Document Object Model,即文档对象模型,是一套对文档的内容进行抽象和概念化的方法,它允许脚本控制Web页面、窗口和文档。

DOM不是JavaScript语言的一部分,而是内置在浏览器中的一个应用程序接口。 如果没有DOM,JavaScript将是另外一种脚本语言;而有了DOM,它将成为制作动态页面的强有力工具。当然,我们可以简单的理解为一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。

DOM是一组用来描述脚本怎样与结构化文档进行交互和访问的web标准。他的功能是把浏览器支持的文档(包括HTML、XML、XHTML)当作一个对象来解析。DOM实际上是一个操作文档里面所包含内容的一个编程的API,允许开发人员从文档中读取、搜索、修改、增加和删除数据。DOM与平台和语言无关,只要是支持DOM的平台和编程语言,都可以用来编写文档。

DOM定义了一系列对象、方法和属性,用于访问、操作和创建文档中的内容、结构、样式以及行为。每一个网页元素(一个HTML标签)都对应着一个对象。我们可以把DOM认为是页面上数据和结构的一个树形表示,树根是window或document对象,相当于最外层的标签的外围,也就是整个文档。

节点(node)

节点这个词是一个网络用语,代表了网络中的一个连接点,一个网络就是由一些节点构成的集合。在现实世界中,一切事物都由原子构成,原子就是现实世界的节点。原子还可以进一步分解为更细小的亚原子微粒,这些亚原子微粒同样也是节点。

在DOM中,文档是由节点构成的集合,HTML文档中所有内容都被视为节点,DOM被视为节点树的HTML。通过以下代码来认识一下节点的类型。

<!--头部-->
<div title="a gentle reminder">hello world</div>
  • 文档节点(document):当前html文档。

  • 注释节点(comment):< !–头部–>

  • 元素节点(Element):< div>< /div>

  • 属性节点(attribute):title=“a gentle reminder”

  • 文本节点(text):hello world

节点信息相关属性 层次结构相关属性 方法
nodeType childNodes appendChild(child)
nodeName firstChild insertBefore(new,ref)
nodeValue lastChild removeChild(child)
nextSibling replaceChild(new,old)
parentNode cloneNode([boolean])
参数为true时,表示除了克隆当前对象,还克隆子元素
parentElement
ownerDocument

需要注意的是,nodeType 属性返回节点的类型,用数字来表示。如果是元素节点,返回 1;如果是属性节点, 返回 2;如果是文本节点,返回 3;如果是注释节点,返回 8。该属性是只读的。

基本的DOM方法

  • document.getElementById(): 返回对拥有指定 ID 的第一个对象的引用。

  • document.getElementsByName() : 返回带有指定名称的对象的集合。

  • document.getElementsByTagName() : 返回带有指定标签名的对象的集合。

  • document.getElementsByClassName(): 返回带有指定类名的对象的集合。

  • document.querySelector() : 返回匹配指定 CSS 选择器的一个对象的引用。

  • document.querySelectorAll() : 返回匹配指定 CSS 选择器的的对象的集合。

  • document.body: 提供对 < body> 元素的直接访问。

  • document.forms: 返回对文档中所有 Form 对象引用。

  • 表单名.控件名.value: 获取表单控件的值。

  • document.title: 返回当前文档的标题。

  • createElement(): 创建一个节点。

  • innerText: 向当前元素内部添加文本节点。

  • innerHTML: 向当前元素内部添加HTML代码片段。

  • style: 获取或者设置样式。

  • getAttribute(key): 返回指定属性名的属性值。

  • getAttributeNames(): 返回指定对象的属性名。

  • setAttribute(key,val): 添加指定的属性,并为其赋指定的值。如果这个指定的属性已存在,则仅设置/更改值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button>添加</button><button>导入</button><button>批量删除</button><a href="" id="btn_export">导出</a><div id="content"></div><script>var btns = document.querySelectorAll("button");var $content = document.querySelector("#content");// 点击添加后,向content中添加一个h2元素btns[0].onclick = function(){var $h2 = document.createElement("h2");$h2.innerText = "这是一个新标题";$content.appendChild($h2)}// 移除$content中所有的孩子节点btns[2].onclick = function(){Array.from(document.querySelectorAll("#content > *")).forEach((item)=>{$content.removeChild(item)})}document.querySelector("#btn_export").onclick = function(event){alert(1);console.log(event);//取消事件的默认动作event.preventDefault();}</script>
</body>
</html>

DOM事件机制

javascript与HTML之间的交互是通过事件实现的。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。

事件三要素

  • 事件源:dom对象(元素节点)。
  • 事件处理函数:匿名函数。(在未来的某个时刻执行,由浏览器来调用,浏览器在调用的时候会将事件对象传递给我们这个函数)。
  • 事件对象:与特定事件相关且包含有关该事件详细信息的对象。

事件类型

  • onclick:用户点击时执行。
  • onload:用户进入时执行。
  • onunload。用户离开时执行。
  • onmouseover:鼠标移入时执行。
  • onmouseout:鼠标移出时执行。
  • onmousedown:鼠标摁下时执行。
  • onmouseup:鼠标松开时执行。

事件流(事件冒泡)

  1. 元素具有嵌套关系。
<style>#outer,#center,#inner {border: 1px solid #ccc;box-sizing: border-box;border-radius: 50%;}#outer {width: 500px;margin: 0 auto;height: 500px;padding: 50px;}#center , #inner{height: 100%;padding: 50px;}
</style>
<div class="outer"><div class="center"><div class="inner"></div></div>
</div>
  1. 每层元素都绑定事件处理函数。
var $outer = document.querySelector("#outer")
var $center = document.querySelector("#center")
var $inner = document.querySelector("#inner")$outer.onclick = function(event){console.log('outer',event.target);
}
$center.onclick = function(event){console.log('center',event.target);event.stopPropagation();
}
$inner.onclick = function(event){console.log('inner',event.target);event.stopPropagation();
}
  1. 操作。
    比如:当我们点击inner的时候,实际上也点击center、outer。
    事件捕获: outer -> center -> inner
    事件冒泡: inner -> center -> outer

需要注意的是,事件处理函数的调用默认是按照事件冒泡的顺序来调用。

事件绑定

事件源 . on事件类型 = 事件处理函数(事件对象){ }

dom.onClick = function(event){addEventListener();   //事件绑定//attachEvent()       removeEventListener();  //事件移除//detachEvent();
}

事件对象

在触发DOM上的某个事件时,会产生一个事件对象event,这个对象包含着所有与事件相关的信息,包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。兼容DOM的浏览器默认会将event对象传入到事件处理函数中。

dom.onclick=function(event){console.log(event);
}
dom.addEventListener("click",function(event){console.log(event);
},false);
对象属性 说明
event.target 事件的目标元素(操作的元素)
event.clientX、event.clientY 事件触发时候的坐标
event.preventDefault() 取消事件的默认行为
event.stopPropagation() 取消事件冒泡

事件代理

将事件绑定在父元素上而非子元素上。

添加业务: 点击添加按钮 -> 弹模态框 -> 输入数据 -> 保存 -> ajax -> 后台服务器 -> 关闭模态框 ->刷新页面 -> 通知保存成功。

Javascript dom与jQuery的对比

业务 javascript dom jQuery
选择元素 querySelector() 选择器 $("")
dom操作 无法进行批量操作 可以实现批量操作
事件绑定 兼容性较差 兼容性,高效,批量 ,方法简洁
dom.onClick = function(event){} $(’.btn_del’).click
dom层级关系 操作繁杂 操作简练

jQuery 实际上是对于dom api封装,让用户使用dom方法变得更加简洁,下一篇文章将对jQuery展开详细说明~

JavaScript学习笔记之DOM篇,带你全面了解什么是DOM相关推荐

  1. JavaScript学习笔记之入门篇

    JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...

  2. JavaScript学习笔记之BOM篇,认识几种常见的浏览器对象

    BOM(Browser Object Document)即浏览器对象模型,顾名思义就是为了控制浏览器的行为而出现的接口.浏览器可以做什么呢?比如跳转到另一个页面.前进.后退等等,程序还可能需要获取屏幕 ...

  3. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  4. 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM

    web前端教程JavaScript学习笔记 DOM一DOM(Document Object Model): 文档对象模型 其实就是操作 html 中的标签的一些能力 我们可以操作哪些内容 获取一个元素 ...

  5. JavaScript学习笔记05【高级——DOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  6. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  7. JavaScript学习笔记(四)(DOM)

    JavaScript学习笔记(四) DOM 一.DOM概述 二.元素对象 2.1 获取方式 (1).通过ID获取一个元素对象,如果没有返回null (2).通过`标签名`获取一组元素对象,,如果没有返 ...

  8. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. JavaScript学习笔记(一)-Learning Advanced JavaScript

    JavaScript学习笔记 (一)- Learning Advanced JavaScript Learning Advanced JavaScript #2: Goal: To be able t ...

最新文章

  1. drf2 FBV和CBV
  2. 约三分之二的 DDoS 攻击指向通信服务提供商
  3. Linux 正则表达式基础
  4. java 直播_一对一直播源码开发过程中区分Java和PHP的重要性
  5. 对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告。ts(1219)
  6. AVPlayerViewController支持横屏设置
  7. web页面官网右侧悬浮固定在线客服代码
  8. 用C语言实现:输入某年某月某日,判断这一天是这一年的第几天
  9. wordpress插件_顶级WordPress反垃圾邮件插件
  10. 【一句日历】2019年4月
  11. python是由荷兰人谁创造的_Python简介(1)诞生和本质
  12. (三)拜占庭将军问题
  13. 02-pandas数据分析库
  14. 世界观和方法论——青山行客
  15. MySQL~数据库表中数据的增删查改(基础篇)
  16. Docker(狂神)
  17. JAVA毕业设计健康食谱系统服务器端计算机源码+lw文档+系统+调试部署+数据库
  18. 未能加载文件或程序集xxxx,系统找不到指定的文件
  19. Cisco IP 电话 将它的voice mail 发送到手机
  20. 电影院竟然暗藏这么多“玄机”!

热门文章

  1. python tclerror_Python Tk _tkinter.TclError:无效的命令名称“.42818376”
  2. YAML 学习笔记 .yml
  3. QT5+ROS程序开发
  4. 板式橡胶支座弹性模量怎样计算_Midas Civil支座模拟的详细解决方法
  5. 【Android】命令行jarsigner签字和解决找不到证书链错误
  6. MySQL 备份与恢复
  7. ASP.NET MVC 相关的社群与讨论区
  8. Flutter TextButton 详细使用配置、Flutter ButtonStyle样式概述实践
  9. Flutter通过BasicMessageChannel实现Flutter 与Android iOS 的双向通信
  10. 五、Spring中的@Import注解