html+dom+深入,DOM 深入学习 - 1

本文章记录本人在深入学习Javascirpt DOM中看书理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习。

DOM 版本

w3c 指定的DOM规范包括多个版本,不同的版本(或称知为级别)又包含不同的子规法和模块,不同浏览器对DOM的支持是千变万化的。

DOM0级

在很早的时候市场上已经有了一些不同版本的DHTML规范,主要包括IE和Netscape两个不同的版本。这组DHTML规法规定了一套文档对象、集合、方法和属性。虽然不同的DHTML版本的特性存在差异,但是一些基本的思路和用法还是有章可循的。

DOM1级

1998年10月,w3c 推出了DOM 1.0版本的规范。

这个规法主要是包括两个子规范。

- DOM Core(核心部分):把XML文档设计为树形节点结构,并为这种结构的运行机制定制了一套规法化标准,同时定义了创建、编辑、操作这些文档结构的方法以及属性。

- DOM HTML:针对HTML文档、标签集合、以及与个别HTML标签相关的元素定义了对象、属性和方法。

DOM2级

2000年1月,w3c正式发布更新后的DOM核心部分,并且在这次发布添加了一些新的规范,这次发布的DOM称为2级规范。2003年1月,w3c又正式发布了对DOM HTML子规范的修订,添加了针对HTML 4.01和XHTML 1.0版本文档中的很多对象、属性和方法。这次发布就叫做DOM2.0的推荐版本。

DOM 2.0 Core:添加了更多的特性,如针对命名空间的方法等。

DOM 2.0 HTML:针对HTML的文档结构模型,并添加了一些属性。

DOM 2.0 Event:规定了与鼠标相关的事件和控制机制,但是不包括键盘相关事件和处理部分。

DOM 2.0 Style:提供了访问和操作所有与css相关的样式以及规则的能力。

DOM 2.0 Traversal and DOM 2.0 Range:允许开发人员通过迭代方式访问DOM,以便根据需要对文档进行遍历或者其他的操作。

DOM 2.0 Views:提供了访问和更新文档的表现的能力。

DOM 2.0规法已经是目前各大浏览器主持的主流标准。可惜对ie的支持并不完善。

DOM3级

2014年4月,w3c发布了DOM3.0版本。

DOM 3.0 Core:添加了更多新的方法和新属性。同时也修改了已有的一些方法。

DOM 3.0 Load and Save:提供将XML文档的内容加载到DOM文档中和将DOM文档序列化为XML的文档能力。

DOM 3.0 Validation:提供了确保动态生成的文档的有效性的能力,即如何符合文档类型声明。

清理 DOM 加载流程

一般浏览器加载顺序:

1. 解析HTML结构

2. 加载外部脚本和样式结构表

3. 解析并且执行脚本代码

4. 构造DOM模型

5. 加载图片等外部文件

6. 页面加载完毕

通过上面的加载顺序可以知道,网页头部的脚本(由外部文件加载)会在构造HTML DOM文档之前执行,这就会导致执行脚本无法访问文档结构模型。

如果页面包含许多的外部文件,如大量的图片、视频、音频、动画等文件,可能会延迟脚本的执行事件。为了避免js脚本处于长时间的等待,可以把需要执行的脚本部分放在HTML文档的中间,这样只要在构造DOM后执行到脚本所在的结构位置,就会执行脚本。所以一般建议把js放在页面的底部。

谨慎访问 DOM

访问一个DOM元素是代价比较高的,修改元素的代价更高,因为它们经常导致浏览器重新计算页面的几何变换。在访问或者修改元素最不好的情况下就是使用循环执行操作,特别是在HTML集合中使用循环。

for (var i = 0; i < 15000; i++) {

document.getElementById('here').innerHTML += 'a';

};

上面这段代码的问题就是每一次循环都会去对DOM元素访问两次:一次是读取innerHTML属性能容,第二次是写入它。更有效率的方法是使用局部宾利储存更新后的内容,在循环结束后一次性写入。

var text = '';

for (var i = 0; i < 15000; i++) {

text += 'a';

};

document.getElementById('here').innerHTML += text;

innerHTML 与 DOM 方法

谁的性能比较好

两者的性能都是基本接近,不过几乎所有的浏览器中,innerHTML的速度会更快一些,但是最新的基于webkit内核的浏览器除外。

如何选用

使用innerHTML的好处就是在早期的浏览器上面是显而易见的,但在最新版本的浏览器上面就没有那么的明显。因此,采用哪种方法将取决于用户经常使用的浏览器,以及个人的编码爱好。

对于日常的大多数的操作而言,使用innerHTML和使用DOM差异并不是很大,应当根据代码的可读性、可维护性、团队习惯、以及代码风格来综合决定采用那种风格。

警惕文档遍历中的空格 bug

在遍历DOM元素时候,空格的存在很容易造成误解,因为DOM把空格也作为一个节点进行解析(换行符也算)。

var el = document.documentElement.lastChild.firstChild.nodeName;

可以使用上面的代码去检测DOM的元素。

可以定义一个函数用来清除所有包括包含文本节点。这样当执行文档遍历的时候,就不存在元素之间的空格影响。函数要在文档结构加载完后在执行。

function clean(el) {

var el = el || document,

f = el.firstChild;

while (f != null) {

if (f.nodeType === 3 && /\s/.test(f.nodeValue)) {

e.removeChild(f);

} else if (f.nodeType === 1) {

arguments.callee(f);

}

f = f.nextSibling;

};

}

使用上面函数要注意到是,该函数的功能仅是临时性的清除元素之间的空格,需要在HTML文档的每一次加载是都重新只想你个一遍清除的操作。当然,使用这种方法虽然比较高效,但是在每次遍历文档之前,都需要先执行一次遍历操作,如果文档的结构比较复杂,那么这个操作所消耗的系统资源是不可小视的。

bVlFiC

最后,如果文章有什么错误和疑问的地方,请指出。与sf各位共勉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机应用常用的30个函数,Excel中常用函数的使用

&#xff29;&#xff33;&#xff33;&#xff2e;&#xff11;&#xff10;&#xff10;&#xff19;—&#xff13;&#xff10;“咖船&#xff52;&#xff2b;&#xff4e;&#xff4f;别&#xff42;内&#xff45;&#xff41;&#xff4e;&#xff44;伯叻肋叻电奠知识…

cam350怎么看顶层_厉害的人是怎么分析问题的?(实操干货)

“经常做一个方案&#xff0c;几十页PPT还没把问题讲清楚&#xff0c;老板一个问题就貌似发现了关键&#xff0c;这到底是一种怎么样的思维方式&#xff1f;”我在职场这么多年&#xff0c;也遇到过很多次这样的问题。在我初入职场时&#xff0c;经领导点拨后&#xff0c;也产生…

抓球球的机器人应该怎么玩_王者荣耀:在游戏中当自己优势队友劣势的时候应该怎么玩?...

游戏里时常会有这么一种情况出现&#xff0c;我们疯狂Carry&#xff0c;一看战绩十几杠几&#xff0c;C得不行&#xff0c;但是队伍就是要输&#xff0c;颓势总是无法挽回。今天我就给大家说一下&#xff0c;是什么样的原因导致这种情况的发生。队友劣势的原因分析&#xff1a;…

ajax获得excel文件流在前端打开_主流前端技术讲解,面试必考!

Vue.js是Web前端的一个框架&#xff0c;用来快速开发单页面应用。当Vue.js开发变成主流的时候&#xff0c;许多公司的技术团队都打算把下一个新项目换成用Vue.js来开发。但是当我们详细了解Vue.js以后&#xff0c;会发现一个很尴尬的问题&#xff0c;那就是Vue.js的页面是采用客…

计算机无法用telnet,telnet不是内部或外部命令解决办法 Windows10开启Telnet功能方法...

一般情况下&#xff0c;Windows10正式版系统的telnet服务都是处于关闭状态的&#xff0c;需要我们手动开启才可以。telnet服务可以调试端口&#xff0c;其重要性不容小视。今天&#xff0c;就告诉教大家Windows如何配置telnet服务&#xff1f;虽然说今天以Windows10来示例&…

计算机主板另一个名称,主板名称太复杂 看这几点就秒懂了

现在的主板厂商特看重个性化和市场细分&#xff0c;恨不得给每个人定制最适合的主板&#xff0c;所以主板型号多到爆&#xff0c;名称还都特别长&#xff0c;看得人眼晕还看不懂。其实这些名字虽然拉拉杂杂一长串&#xff0c;但都带有很好理解的“关键词”&#xff0c;只要扫一…

亚马逊产品描述计算机语言编辑,亚马逊Listing产品描述编辑讲解

烂人的虚伪我从头看到尾优质答主01-24TA获得超过2782个赞自建listing&#xff0c;就是根据自己的产品&#xff0c;自己打造产品客户端的展示内容&#xff0c;让顾客了解自己的产品&#xff0c;有下单的欲望&#xff01;建好如果效果不好&#xff0c;还要进行优化&#xff0c;最…

计算机的硬盘 内存在哪查到,电脑硬盘内存怎么查看

电脑硬盘内存怎么查看在我们买电脑的时候我们一般都会选择去看看电脑硬盘内存的大小。那么电脑硬盘内存怎么查看呢?下面就由jy135小编来告诉大家吧&#xff0c;欢迎阅读。方法一、在电脑系统中查看1、这里以 Windows7 系统为例&#xff0c;选中桌面的“计算机”图标&#xff0…

linux messages 时间错乱_BATJ 常考的 21 条 Linux 命令,速度收藏!

来源: http://t.cn/EqTIhES一、文件和目录1. cd命令(它用于切换当前目录&#xff0c;它的参数是要切换到的目录的路径&#xff0c;可以是绝对路径&#xff0c;也可以是相对路径)cd /home 进入 / home 目录cd .. 返回上一级目录 cd ../.. 返回上两级目录 …

layui导航栏页面滚动固定_网站建设页面导航如何降低用户寻找的时间

做为正确引导客户体验网站的莱单导航栏&#xff0c;从检索视角上而言&#xff0c;也起着关键的功效&#xff0c;莱单导航栏不但联系网站的外界&#xff0c;也联系着网站主页面及其别的网页&#xff0c;是全部网站的“管理中心”&#xff0c;因此网站建设中莱单导航栏设计方案&a…

c++ new 数组_用Java实现JVM第八章《数组和字符串》

案例介绍本章主要介绍如何实现让虚拟机处理数组和字符串&#xff0c;在虚拟机功能增强后&#xff0c;我们可以执行数组类型计算和输出字符串。本章需要新增实现数组指令&#xff1b;newarray、anewarray、arraylength、aload、astore、multianewarray、ldc&#xff0c;同时需要…

计算机IP为什么只有255,为什么电脑IP地址最大值是255?

一、为什么电脑IP地址最大值是255&#xff1f;目前我们常用的IP地址叫IPV4地址&#xff0c;如IP地址&#xff1a;192.168.1.1它是4个字节(Byte)的数据&#xff0c;在计算机中1个字节(Byte)8个二进制位(bit)所以一个IP地址共有4832个二进制位&#xff0c;通常被分割为4组&#x…

c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

第三章&#xff1a;栈和队列下面讲解栈的应用主要内容有&#xff1a;栈的应用、括号匹配、中 后 前 缀表达式转换1.栈的应用1.1括号匹配我们在数学运算中 [(Ab)*c] - (E-F) 往往都会有[ ] 和 ( ) 来表示运算的优先级&#xff0c;我们把这样的[ ] 和 ( ) 提取出来组成的序列叫做…

测试你是什么样的双眼皮软件,来测试你适合哪种双眼皮?

你的脸型适合哪种双眼皮&#xff1f;自己可以来测试下很多人喜欢大眼睛&#xff0c;双眼皮&#xff0c;觉得越宽越大越好看。我觉得只要和自己五官协调就是最好看的。不同脸型适合什么样的双眼皮&#xff1f;1、平行型&#xff1a;适合眼睛比较大、眉弓比较高、眉毛距眼睛较远且…

服务器内存不认硬盘_服务器品牌有哪些?如何选择服务器?

前段时间我们发布丰富机房建设相关内容&#xff0c;有很多朋友就问到如何保证服务器可以支持百万用户访问&#xff1f;服务器品牌有哪些&#xff1f;服务打开速度慢怎么办&#xff1f;选择服务器主要看哪些参数&#xff1f;。本期我们一起来了解这方面内容。一、服务器品牌服务…

mpi由于目标计算机积极拒绝,windows系统lammps安装MPICH2的问题

20170610补充&#xff1a;补充上次补充内容的文字说明&#xff1a;MPICH2的安装一半没问题。最常遇到的问题是不清楚注册时候到底使用哪个用户名或者计算机名。在确保安装成功的前提下&#xff0c;运行命令&#xff1a;mpiexec -register会让输入用户名和密码。这个用户名是计算…

datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集

这是第151篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题&#xff0c;建议阅读时间10分钟&#xff0c;认真读完必有收获。UWA 问答社区&#xff1a;answer.uwa4d.comUWA QQ群2&#xff1a;793972859(原群已满员)本期目录&#xff1a;如何规划UI…

贾立平是中科学院计算机所博士,中国科学院博士生贾立平:创新变通能力才是未来最根本的竞争力...

人民网北京1月8日电 宇宙巡游2020——UCCA Kids艺术嘉年华4日开幕。中国科学院博士生贾立平表示&#xff0c;脑科学可以更好地了解孩子的想象力、创造力&#xff0c;通过艺术&#xff0c;会更快地促进孩子能力的发展。“宇宙巡游2020”儿童艺术展览学生作品《太阳系的热带森林》…

音频服务器未运行怎么办,音频服务未运行怎么办 音频服务未运行解决方法【详细介绍】...

最近许多网友在使用电脑时遇到了“音频服务未运行”的错误提示&#xff0c;出现这种提示的原因有很多&#xff0c;症状也不尽相同。今天我们就针对不同的“音频服务未运行”症状进行分析解答&#xff0c;希望能对大家有所帮助。由于音频服务未运行可能是硬件配置不正确造成的&a…

jquery查找父窗体id_Vue父组件获取子组件中的变量

全世界只有不到3 % 的人关注了我你真是个特别的人在vue项目日常开发中&#xff0c;难免要把功能性组件抽离出来&#xff0c;这样结构就会出现父子组件&#xff0c;兄弟组件等&#xff0c;但是这样就会涉及到不同组件需要互相使用其中的某个值的问题。之前有说过通过ref来让父组…