解释清楚DOM原理并不是一件容易的事,但是任何一个前端工程师,都必须牢牢掌握它。

DOM整体架构

图解: DOM,即针对XML文档的应用程序编程接口(API).通俗一点说,HTML属于XML的一种,先将HTML映射成节点树,然后对节点树提供一套增删改查的方法。

DOM1 Core:

图解:  1. Node: 节点接口。属性:nodeType(1:element,2:attr,3:text),nodeValue(属性value值/节点的文本值);方法:提供了’节点级‘的’上下左右‘增删改查API。’节点级‘指的是,首先必须定位此节点。 ’上下左右‘指的是,parent,child,previous,next四个方向。查找API:parentNode父节点,  childNodes子节点集,previousSibling()往前兄弟节点集,nextSibling()往后兄弟节点集,firstChild(),lastChild();删改查(仅提供’下‘):appendChild()加到子节点最后面,replaceChild(),removeChild(),insertBefore()插入到某节点前。

2. HTML Docment。属性:title; 方法:‘范围级’(’范围级’指不需要定位到节点,整个文档范围内)增查API:getElementsByTagName(),getElementById(),getElementsByName();createElement(); IO流API:wirte(),writeln(),open(),close().此API基本用不到,因为它会重写,将文档原有内容完全覆盖; 文档碎片:createDocumentFragment(),开辟新的微型DOM空间,此空间内,你可以应用DOM方法,操作完毕后,再一次加入DOM树。和innerHTML有异曲同工之妙。  都是为减少对DOM的访问。  标准检测:implementation.hasFeature. 少用,原因是浏览器常会返回true。但并不保证支持。一般用能力检查,譬如判断是否支持‘Worker’,写 if(Worker){};

3. HTML Element。 属性:id,className,title;方法:对属性的增删改查API,如getAttribute();  我们操作原生属性,比如id,会直接element.id/element.id='XXX'/element.id=null; 如果是自定义属性,则必须通过属性API才能访问到。

4. 三大集合:NodeList(节点集合),HTMLCollection,NamedNodeMap(属性map);三大集合都是实时同步的。访问三大属性一定要用变量缓存,否则容易造成内存泄露。

DOM1 Core:

图解:  1. Selectors API: 通过样式访问DOM节点。

2. Element Traversal API:NodeList会返回Text节点,此API可以避免此问题,仅返回Element。

DOM2-3Core:

图解:  1. DOM2 Core主要是增加了对命名空间的支持,针对混合XML语言,比如HTML,SVG混合的界面,HTML标签上需要增加xmlns:命名空间URL;DOM上,则methodName+NS;第一个参数传命名空间URL。

DOM2-3Style:

图解:  1. 文档的样式分为行内样式,内嵌样式,外联样式。element.style可以对行内样式直接进行增删改查操作。如element.sytle/element.sytle.height='90px;'/elment.style.height='auto';如果要获取计算出来的样式,需window.getComputedStyle();实际上读行内样式是毫无意义的,原因是那不是真正作用它的样式。但是操作,仅允许对行内样式进行修改。它的优先级最高,会覆盖其他类型样式。特殊情况,其他类型样式设置了‘!important’,行内样式也需带上‘!important’才能覆盖。

2. 三大高宽:offsetHeight/offsetWidth: contentHeight/Width+padding+滚动条+border。clientHeight/clientWidth:contentHeight/Width+padding; scrollHeight/scrollWidth:Math.max(scrollHeight/Width, clientHeight/clientWidth);scrollTop,scrollLeft;(IE6-的contentHeight=contentHeight+padding+border);

3. 位置:getBoundingClientRect()获取top,left,right,bottom;IE-的坐标从2,2开始。

HTML5 DOM:

图解:  HTML5为将来的DOM扩展指引方向(可以理解为对现存的DOM不满,抢DOM制定小组的饭碗)

document.activeElement:当前获取了焦点的元素。

element.dataset: 在元素里自定义属性‘data-XXX’.通过element.dataset可以获取到自定义属性集。

element.insertAdjacentHTML(): 针对DOM1 ‘节点级’增删改查的字符串实现。提供‘beforebegin,afterbegin,beforeend,afterend’上下左右四个方向,允许插入DOM字符串。

scrollIntoView(true/false): true:将元素滚动到与视窗顶部持平;false:相反,与底部持平。

DOMTokenList: element.classList 获取className的集合对象

javascript基础-DOM原理的更多相关文章

  1. JavaScript基础—dom,事件

    Js基础-DOM 1:dom:文档对象模型 Dom就是html页面的模型,将每个标签都作为一个对象,js通过调用dom中的属性,方法就可以对网页中的文本框,层等元素进行编程控制.Dom就是一些让jav ...

  2. javascript体系 DOM原理

    解释清楚DOM原理并不是一件容易的事,但是任何一个前端工程师,都必须牢牢掌握它. DOM整体架构: 图解: DOM,即针对XML文档的应用程序编程接口(API).通俗一点说,HTML属于XML的一种, ...

  3. JavaScript基础 -- DOM

    一.DOM全称 文档对象模型(Document Object Model) 二.DOM是什么 DOM可以说是制作动态页面的强有力工具.DOM不是JavaScript语言的一部分,而是内置在浏览器中的一 ...

  4. JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)

    DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...

  5. Javaweb学习笔记——(三)——————JavaScript基础&DOM基础

    day031.js的String对象 **创建String对象 ***var str = "abc"; **方法和属性(文档) ***属性 lenth:字符串的长度 ***方法 ( ...

  6. JavaScript基础--DOM对象加强篇(十四)

    1.document 对象 定义:document对象代表的整个html文档,因此可以去访问到文档中的各个对象(元素)document重要的函数 1.1 write 向文档输出文本或js代码 1.2 ...

  7. JavaScript基础DOM介绍和常用操作(5)

    day53 参考:https://www.cnblogs.com/liwenzhou/p/8011504.html JavaScript引入方式 location对象 window.location ...

  8. 原生javascript 基础动画原理

    一.实现原理: 1.开定时器前先清除定时器 2.设置定时器 3.当前元素的位置 + 每一步的长度 4.当元素当前位置超过目标点时,把当前位置==目标点 5.设置元素位置,开始运动 6.判断当前位置如果 ...

  9. JavaScript基础 DOM的操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 一.属性和方法: window对象——浏览器 ...

随机推荐

  1. nodeName,nodeValue,nodeType,typeof 的区别

        nodeName 属性含有某个节点的名称.  元素节点的 nodeName 是标签名称  属性节点的 nodeName 是属性名称  文本节点的 nodeName 永远是 #text  文档节 ...

  2. 【树莓派】修改树莓派盒子MAC地址

    用树莓派盒子,在某些客户方实施过程中,不同客户的网络环境对树莓派盒子的要求不同,网络管理配置要求MAC地址和IP绑定. 一种情况下,查询盒子的MAC地址,添加到网络管理的路由规则中即可: 另一种情况下 ...

  3. php 启动过程 - reqeust RINIT 过程

    php 启动过程 - reqeust RINIT 过程 概述 apache 接收到请求之后, 交给 php 处理 php 模块在接收到请求后, 会对请求进行初始化, 及 RINIT 过程 调用触发 a ...

  4. HR最喜欢问的问题_"你的职业规划是什么?"

    很多面试官都会问,“你的职业规划是什么?”这个问题往往会难倒很多求职者.今天我跟大家分享,求职者怎样回答,才能更给自己加分 1.对目前自己要从事的这个岗位有清晰的认识,比如这个主要的工作是做什么的,大 ...

  5. Swift try try! try?使用和区别

    Swift try try! try?使用和区别 一.异常处理try catch的使用 1. swift异常处理 历史由来 Swift1.0版本 Cocoa Touch 的 NSError ,Swif ...

  6. 分享一个随机更改 MAC地址 软件

    有些软件 是根据 MAC地址 来判断 是不是 已经 安装过 这个 软件 (针对 有些软件是 可以 免费 使用的 ) 要想 一直 使用 的话 只需要 修改一下 mac地址 就可以 继续 使用! 在百度中 ...

  7. 【代码学习】MYSQL数据库的常见操作

    ---恢复内容开始--- ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与 ...

  8. Elasticsearch 全量遍历数据

    1,利用分页,from,to参数,但是当数据量特别大的时候(大约100w),分页是不现实的,排序排不开. 2,利用scan功能. 上 Python代码 from elasticsearch impor ...

  9. PHP count() 函数

    count() 函数计算数组中的单元数目或对象中的属性个数. 对于数组,返回其元素的个数,对于其他值,返回 1.如果参数是变量而变量没有定义,则返回 0.如果 mode 被设置为 COUNT_RECU ...

  10. ASP.NET WebForm

    ASP.NET WEBFORM Aspx aspx文件(新建项→Web窗体) .在aspx中可以使用<%=表达式%>的方式在页面的当前位置输出表达式(表达式至少要用protected级别, ...