从零开始学习BOM&DOM(三)

简介: 从零开始学习BOM&DOM

Element 类型

Element 类型用于表现XML和HTML元素,提供了对元素标签名,子节点及特性的访问

我们平时创建的div、p、span等元素在DOM中表示为Element元素

常见属性

  • 子元素 children childNodes
  • tagName
  • id/class
  • clientWidth/clientHeight
  • clientLeft/clientTop
  • offsetLeft/offsetTop

常见方法

获取特性 getAttribute 修改某个特性 setAttribute

创建元素 document.createElement()

Text 类型

文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容

  • 创建文本节点:document.createTextNode()

Comment 类型

注释

DocumentFragment 类型

DOM规定文档片段是一种轻量级的文档,不会像完整的文档那样占有额外的资源

可以在里面保存将来会添加到文档的节点。要创建文档片段,可以使用document.createDocumentFragment()

文档片段本身永远不会成为文档树的一部分

Attr类型

元素的特性在DOM中用Attr类型来表示。很少使用。

总结

DOM1级将HTML和XML文档看作一个层次化的节点树,方便js来直接操作。

DOM 是由各种节点构成的

  • 最基本节点是Node,所有的节点都继承自Node
  • Document 表示整个文档
  • Element 表示文档中的HTML 或者XML 元素

DOM扩展

对DOM的扩展主要包括 选择符API 和 HTML5

选择符API

选择符,最核心的两个API 就是 querySelector() 和 querySelectorAll()

可以通过Document 和 Element 类型的实例调用

const divEl1 = document.querySelector(".content")
const divEl2 = document.querySelectorAll(".content")

HTML5

html5涉及的面非常广,我们这里这讨论与DOM 节点相关的内容

获取dom元素

  • getElementsByClassName() 可以通过document 对象和所有HTML元素调用该方法,查询一个或者包含类名的字符串

自定义数据属性

可以为元素添加非标准的属性,但是要添加前缀 data-

通过元素的 dataset 属性来访问自定义的属性的值

<div id ="myDiv" data-appId = "12345" data-name="yz"></div>
var div = document.getElementById('myDiv')
var appId = div.dataset.appId
var name = div.dataset.name

插入标记

innerHTML属性

  • 可以获取调用元素的所有子节点对应的html片段
  • 可以是根据指定的值创建DOM树,替换原有的元素节点

一般我们插入大量新HTML标记时,使用innerHTML 与通过多次DOM操作先创建节点再指定它们之间的关系相比,效率更高,因为在设置innerHTML 时就会先创建一个HTML解析器,这个解析是在浏览器级别的基础上代码(c++)运行的,因此比执行js 快得多,当然也会带来 创建销毁 html 解析器也有性能消耗。所以控制次数。

DOM2和DOM3

DOM1级主要定义的是HTML和XML文档的底层结构

DOM2级和DOM3级是在这个结构基础上引入了更多的交互能力和特性。扩展了DOM API,以满足操作DOM的所有需求,同时提供更好的错误处理和特性监测能力

DOM变化

  • Node 类型 Document 类型 Element 类型 增加了命名空间的概念
  • DOM3引入 两个辅助比较节点的方法 isSameNode() 和 isEqualNode( )
  • 一个判断相同 两个节点引用的是同一个对象
  • 一个判断相等 两个节点是同类型的对象,具有相等的属性(nodeName,nodeValue等等),而且他们的attributes和 childNodes属性也相等(相同位置包含相同的)
var div1 = document.createElement("div")
div1.setAttribute("class","box")
var div1 = document.createElement("div")
div1.setAttribute("class","box")
alert(div1.isSameNode(div1)) // true
alert(div1.isEqualNode(div1)) // true
alert(div1.isSameNode(div2)) // false
  • iframe中的文档对象可以通过contentDocument 访问 所有浏览器都支持
var iframe = document.getElementById("myIframe")
var iframe = iframe.contentDocuemnt || iframe.contentWindow.document

样式变化

访问元素的样式

  • 新增style属性 可以通过style对象访问所有样式信息,也可以进行修改
  • document.default.getComputedStyle(dom) 可以返回整个dom的样式

操作样式表

  • 大多数情况下,使用style属性就可以满足所有操作样式柜子的需求

元素大小

  • 偏移量
  • offsetHeight offsetWdith offsetLeft offsetTop
  • 可以通过以上四个属性计算
  • 客户区大小
  • clientHeight clientWidth
  • 滚动大小
  • scrollHeight scrollWidth scrollLeft scrollTop
  • scrollLeft scrollTop可以用来确定当前元素滚动状态


1686840398269.jpg

确定元素大小

  • getBoundClientRect()返回一个矩形对象,包含四个属性 left top right bottom,给出了元素在页面中相对于视口的位置。
  • top/y:元素上边到视窗上边的距离;
  • right:元素右边到视窗左边的距离;
  • bottom:元素下边到视窗上边的距离;
  • left/x:元素左边到视窗左边的距离;
  • width:元素的宽度;
  • height:元素的高度;


1686840425892.jpg

范围

为了让开发人员更方便得控制页面,dom2 定义了范围 range接口。

document.createRange()

  • 用dom范围实现简单选择
var range1 = document.createRange()
var p1 = document.getElementById('p1')
range1.selcetNode(p1)
  • 也可以操作修改dom范围中的内容

小结

dom2 级主要新增了操作样式的能力和操作范围内dom的能力

总结

对于dom和bom的学习,我所秉持的观点依然是,抓大放小,建立知识体系,常用的api可以了解,不常用的api知道去哪里查就好,因为平常业务开发也接触不到太底层的代码。

框架发展到今天,对我们前端开发来说,已经很少去操作Dom了,但框架已经帮助我们做了,对于Bom的交互也有很多封装成熟的函数库,但是如果要对前端深入学习,我觉得这些知识还是必须掌握的,前端学习js 永远是基础,框架函数库,都是锦上添花的东西。

我们要知其然,更要知其所以然。


相关文章
|
5月前
|
XML 消息中间件 JavaScript
从0开始学习JavaScript--JavaScript DOM操作与事件处理
在前端开发中,DOM(文档对象模型)是一个至关重要的概念,它为JavaScript提供了一种与HTML和XML文档交互的方法。本文将深入探讨DOM的概念与作用,以及JavaScript与DOM之间的密切关系。
|
1月前
|
JavaScript 前端开发
深入了解 JavaScript 中的 DOM 和 BOM
深入了解 JavaScript 中的 DOM 和 BOM
20 4
|
2月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
72 0
|
4月前
|
XML JavaScript 前端开发
JavaScript 之 DOM and BOM 总结
JavaScript 之 DOM and BOM 总结
32 0
|
5月前
|
XML 存储 JavaScript
JavaScript详解DOM和BOM(持续更新)
JavaScript详解DOM和BOM(持续更新)
|
5月前
|
XML JavaScript 前端开发
js中dom和bom有什么区别
js中dom和bom有什么区别
36 0
|
5月前
|
编解码 JavaScript 前端开发
BOM和DOM:BOM(浏览器对象模型)提供了与浏览器交互的能力,如弹窗、定时器等;DOM(文档对象模型)提供了操作HTML元素的能力,如获取、修改元素内容和属性。
BOM和DOM:BOM(浏览器对象模型)提供了与浏览器交互的能力,如弹窗、定时器等;DOM(文档对象模型)提供了操作HTML元素的能力,如获取、修改元素内容和属性。
41 2
|
1月前
|
JavaScript 前端开发
【React学习】—虚拟DOM两种创建方式(二)
【React学习】—虚拟DOM两种创建方式(二)
|
5月前
|
XML JavaScript 前端开发
JavaScript、ECMAScript、DOM和BOM对象
JavaScript、ECMAScript、DOM和BOM对象
43 0
|
7月前
|
JavaScript 前端开发
函数 DOM BOM
函数 DOM BOM
函数 DOM BOM