DOM编程2

《JavaScript DOM 编程艺术》(第2版)之读后感悟 在阅读完第一本书——《JavaScript DOM编程艺术》之后,有一些自己的感悟和理解,顺带把书中的一些常用的原生JS所写的方法罗列出来,以供参考和使用。 阅读详情

DOM编程

 

DOM是什么

DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/),DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件。简单理解,DOM解决了Netscape的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对像。

 

window对象

       window对象代表窗口,可以使用 window 对象获取浏览器窗口的属性及页面内容,可以通过window对象处理窗口中发生的事件和影响窗口的浏览器的访问。window是最常用的一个对象,使用window对象的属性和方法是可以省略window.直接使用。

 

属性:

       opener: 获取打开当前窗口的窗口

       name: 获取当前窗口的名字

       parent: 获取窗口的父级窗口, 一般用在使用frameset时

事件:

       onload: 窗体加载完毕之后触发

方法:

       alert: 弹出消息对话框

       confirm: 弹出确认对话框

       prompt: 弹出输入对话框

       setInterval: 设置每隔指定时间执行一次方法

clearInterval: 清除之前的设置

       setTimeout: 设置在指定时间后执行一次方法

clearTimeout: 清除之前的设置

       open: 打开新窗口

       close: 关闭当前窗口

对象:

       location: 包含当前URL信息

       history: 历史URL信息

       event: 代表事件状态

       document: 文档对象

 

 

      

 

      

理解DOM树的概念

 

在理解DOM眼中的HTML文档结构之前,应该对树状结构有所了解。直接位于一个节点之上的节点是该节点的父节点(parent)。直接位于一个节点之下的节点是该节点的子节点(children)。位于同一层次,具有相同父节点的节点是兄弟节点(sibling)。一个节点的下一个层次的节点集合是那个节点的后代(descendant)。一个节点的父节点、祖父节点及其他所有位于它之上的节点都是那个节点的祖先(ancestor)。

 

在DOM眼中,HTML是一种树状结构的文档,<html>是根(root)节点,<head>、<title>、<body>是<html>的子(children)节点,互相之间是兄弟(sibling)节点;<body>下面才是子节点<table>、<span>、<p>等等。HTML的文档结构如图4-12所示。

 

图4-12  HTML文档结构

 

HTML文档的节点

 

由于HTML文档的复杂性,DOM定义了nodeType来表示节点的类型。下表列出了Node常用的几种节点类型。

Node常用的几种节点类型

接    口

nodeType常量

nodeType值

备    注

Document

Node.DOCUMENT_NODE

9

document

Element

Node.ELEMENT_NODE

1

元素节点

Text

Node.TEXT_NODE

3

文本节点

Attr

Node.ATTRIBUTE_NODE

2

节点属性

Comment

Node.COMMENT_NODE

8

注释文本

DocumentFragment

Node.DOCUMENT_FRAGMENT_NODE

11

document片断

 

每个Node对象都有nodeType属性,它用来指定该节点的类型。例如,一个节点的nodeType属性等于Node.ELEMENT_NODE,则代表该节点为Element类型,可以将其作为Element对象,使用Element对象的属性和方法进行相关操作。

 

文本节点的toString方法可以获得节点所代表的内容。

文本节点的获得,例:<p>aa</p>,调p对象的childNodes[0]即可。

注:我们这里主要讨论document和Element节点,其它的对象请参看相应的资料。

 

 

在DOM下,HTML文档的各个节点被视为各种类型的Node对象。每个Node对象都有自己的属性和方法,利用这些属性和方法可以遍历整个文档树。

 

Node对象常用的属性

属    性

描    述

attributes

如果该节点是一个Element,则以NamedNodeMap形式返回该元素的属性

childNodes

以Node[]的形式存放当前节点的子节点。如果没有子节点,则返回空数组

firstChild

以Node的形式返回当前节点的第一个子节点。如果没有子节点,则为null

lastChild

以Node的形式返回当前节点的最后一个子节点。如果没有子节点,则为null

nextSibling

以Node的形式返回当前节点的兄弟下一个节点。如果没有这样的节点,则返回null

nodeName

节点的名字,Element节点则代表Element的标记名称

nodeType

代表节点的类型

parentNode

以Node的形式返回当前节点的父节点。如果没有父节点,则为null

previousSibling

以Node的形式返回紧挨当前节点、位于它之前的兄弟节点。如果没有这样的节点,则返回null

 

Node对象常用的方法

方    法

描    述

appendChild()

通过把一个节点增加到当前节点的childNodes[]组,给文档树增加节点

cloneNode()

复制当前节点,或者复制当前节点以及它的所有子孙节点

要深度clone,要传一个参数true

hasChildNodes()

如果当前节点拥有子节点,则将返回true

insertBefore()

给文档树插入一个节点,位置在当前节点的指定子节点之前。如果该节点已经存在,则删除之再插入到它的位置

removeChild()

从文档树中删除并返回指定的子节点

replaceChild()

从文档树中删除并返回指定的子节点,用另一个节点替换它

 

 

DOM树的根节点是个Document对象,用document我们可以得到该对象,Document定义的方法大多数是生产型方法,主要用于创建可以插入文档中各种类型的节点。常用的Document方法如表4-12所示。

 

表4-12  Document常用的方法

方    法

描    述

createAttribute()

用指定的名字创建新的Attr节点

createComment()

用指定的字符串创建新的Comment节点

createElement()

用指定的标记名创建新的Element节点

createTextNode()

用指定的文本创建新的TextNode节点

getElementById()

返回文档中具有指定id属性的Element节点

getElementsByTagName()

返回文档中具有指定标记名的所有Element节点

getElementsByName()

返回文档中具有指定标记名的所有Element节点

 

 

 

对于Element节点,可以通过调用getAttribute()、setAttribute()、removeAttribute()方法来查询、设置或者删除一个Element节点的性质,比如<table>标记的border属性。

 

下表分别列出了Element常用的属性和方法。

 

表4-13  Element常用的属性

属    性

描    述

tagName

元素的标记名称,比如<p>元素为P。HTML文档返回的tabName均为大写

 

表4-14  Element常用的方法

方    法

描    述

getAttribute

以字符串形式返回指定属性的值

getAttributeNode()

以Attr节点的形式返回指定属性的值

getElementsByTagName()

返回一个Node数组,包含具有指定标记名的所有Element节点的子孙节点,其顺序为在文档中出现的顺序

hasAttribute()

如果该元素具有指定名字的属性,则返回true

removeAttribute()

从元素中删除指定的属性

removeAttributeNode()

从元素的属性列表中删除指定的Attr节点

setAttribute()

把指定的属性设置为指定的字符串值,如果该属性不存在则添加一个新属性

setAttributeNode()

把指定的Attr节点添加到该元素的属性列表中

 

Attr对象代表文档元素的属性,有name、value等属性,可以通过Node接口的attributes属性或者调用Element接口的getAttributeNode()方法来获取。不过,在大多数情况下,使用Element元素属性的最简单方法是getAttribute()和setAttribute()两个方法,而不是Attr对象。

 

使用DOM操作HTML文档

 

利用Node对象定义了一系列属性和方法,可以方便遍历整个HTML文档。用parentNode属性和childNodes[]数组可以在文档树中上下移动;通过遍历childNodes[]数组或者使用firstChild和nextSibling属性进行循环操作,也可以使用lastChild和previousSibling进行逆向循环操作,也可以枚举指定节点的子节点。而调用appendChild()、insertBefore()、removeChild()、replaceChild()方法可以改变一个节点的子节点从而改变文档树。

需要指出的是,childNodes[]的值实际上是一个NodeList对象。因此,可以通过遍历childNodes[]数组的每个元素,来枚举一个给定节点的所有子节点;通过递归,可以枚举树中的所有节点。

 

下面的例子示范如何使用上述的DOM应用编程接口,调用DOM相关对象的方法和属性,操作HTML文档。

 

1.遍历文档树上的节点

DOM将一个HTML文档解析为树状结构,并提供相应的方案来遍历整个HTML文档树。例程4-16和例程4-17为两个遍历树的例子。

这个例子使用了childNodes[]和递归方式来遍历整个文档,统计文档中出现的Element元素总数,并把Element标记名全部打印出来。

例程4-16  sample4_12.htm

 

注意事项:

1、在使用DOM时,必须等文档被装载完毕再执行遍历等行为操作文档。

2、<tbody>标记并没有被使用,但是在统计Element节点总数的时候,<tbody>还是被统计进来了。因为如果没有显式地指定<tr>所属的<thead>、<tbody>或者<tfoot>,则HTML将<tr>标记置入一个默认的<tbody>标签内加以解析。另外,<thead>、<tbody>和<tfoot>标记在一个表格标记内部只能分别有一个。

 

 

例程4-17则使用firstChile、lastChild、nextSibling、previousSibling等树状遍历整个文档树。

例程4-17  sample4_13.htm

2.搜索文档中特定的元素

 

在使用DOM的过程中,有时候需要定位到文档中的某个特定节点,或者具有特定类型的节点列表。这种情况下,可以调用Document对象的getElementsByTagName()和getElementById()方法来实现。document.getElementsByTagName()返回文档中具有指定标记名的全部Element节点数组。Element出现在数组中的顺序就是他们在文档中出现的顺序。传递给getElementsByTagName()的参数忽略大小写。

(注意:可以使用document.body定位到<body>标记,因为它是惟一的。)

 

getElementsByTagName()返回的数组取决于文档。一旦文档改变,返回结果也立即改变。与其相比,getElementById()则比较灵活,可以随时定位到目标,只是要实现给目标元素一个惟一的id属性值。Element对象也支持getElementsByTagName()和getElementById()。不同的是,搜索领域只针对调用者的子节点。

 

例程4-18示范使用document.getElementsByTagName()和document.getElement ById()两个方法定位HTML文档中的元素。

例程4-18  sample4_14.htm

3.修改文档内容

 

遍历整棵文档树、搜索特定的节点,这些操作的最终目的之一是修改文档内容。接下来的两个例子将使用Node的几个常用方法,来演示如何修改文档内容,其代码如例程4-19所示。

例程4-19  sample4_15.htm

注意的是,在将一个节点加入文档之前,先要将这个节点删除,即保证这个节点是无父的。

 

例程4-19通过直接操作body的子节点来修改文档。而在HTML文档中,布局和定位常常通过表格<table>来实现。使用表格来显式信息数据更加普遍。因此,例程4-20将演示操作表格内容,将表格的四个单元行顺序颠倒。如果没有使用<tbody>标记,则<table>把全部的<tr>当作属于一个<tbody>标记的子节点,所以这里采用数组缓存的方式,把行数据颠倒一下。这个例子同时也演示了如何使用DOM创建表格单元行。

例程4-20  sample4_16.htm

  

4.往文档添加新内容

 

在尝试遍历、搜索、修改文档之后,现在试着往文档添加新的内容。其实没有什么新意,只是利用前面提到的Node的属性和方法而已,还是操作<table>标记的内容。有新意的是,我们要实现一个留言簿。用户可以往留言簿里留言,只是不能刷新,数据并没有被持久地保存,其代码如例程4-22所示。

例程4-22  sample4_18.htm

 

 

使用DOM操作XML文档

 

在数据表示方面,XML文档更加结构化。DOM在支持HTML的基础上提供了一系列的API,支持针对XML的访问和操作。利用这些API,可以从XML中提取信息,动态地创建这些信息的HTML呈现文档。处理XML文档,通常遵循“加载XML文档→提取信息→加工信息→创建HTML文档”的过程。

 

例程4-23  sample4_19.htm

例程4-24  供读取调用的XML文档 – employees.xml

JavaScript DOM编程艺术(第2版) 笔记 目录基本概念1、JavaScript语法1.1 JavaScript 代码的执行:1.2 JavaScript 语句1.3 变量1.4 数据类型1.4.1 字符串1.4.2 数值1.4.3 数组1.4.4 对象1.5 操作1.6 条件语句1.6.1 if 条件语句1.6.2 比较操作符1.6.3 逻辑操作符1.6.4 循环语句1.7 函数1.8 对象1.8.1 内建对象1.8.2 宿主对象2、DOM2.1 获取元素 基本概念 程序设计语言 阅读详情

相关推荐

某银行大数据分析平台之云原生架构

软考架构师论文

doudoudouy的博客 768

JavaScript DOM编程艺术(第2版)

JavaScript DOM编程艺术(第2版)pdf电子版网盘下载链接: https://u18278754.ctfile.com/fs/18278754-307029636 转载于:https://blog.51cto.com/12108297/2166359

weixin_33725126的博客 343

Linux中Hadoop 集群搭建

零、下载Hadoop: http://archive.cloudera.com/cdh5/cdh/5/?tdsourcetag=s_pctim_aiomsg 一、集群规划: 搭建的 hadoop 集群由 3 台服务器组成,分别叫做 master,salve1 和 slave2。其中 master 作为主节点,slave1 和 slave2 作为从节点。 二、网络配置: 1.查看 3 个节点的主机名...

白墨的小白博客 3991

JavaScript DOM编程艺术(第2版)读后总结

最近花了整整4天时间看完了JavaScript DOM编程艺术(第2版),这本书讲得是非常底层的DOM操作,读完会对DOM有一个更加深刻的认识。DOM不专属于html网页和javascript,任何支持DOM的程序设计语言都可以使用它,它也可以用来处理任何一种标记语言(比如XML)编写出来的文档。除了标准DOM外,作者还介绍了一些HTML专有属性,比如innerHTML,但是任何时候都可以用标准D...

weixin_41480546的博客 340

论文阅读|《强化学习在加工时间可变的机器人流水车间调度中的应用》

《Reinforcement Learning for robotic flow shop scheduling with processing time variations》 International Journal of Production Research/2021 1 摘要 我们解决了一个机器人流水车间调度问题,其中两种零件类型在每组给定的专用机器上进行处理。单个机器人在固定轨道上移动,一次运输一个部件,在给定的时间间隔内,这些部件在机器上的加工时间各不相同。我们使用强化...

太剧烈的快乐与太剧烈的悲哀是有相同之点的——同样地需要远离人群! 2929

中国高质量夜间灯光数据

中国高质量夜间灯光数据是CnOpenData与吉林高分遥感应用研究院有限公司合作的数据库 ,基于多源夜间灯光卫星遥感影像,经过科学手段对数据进行降噪、修正、分析统计,以年度、月度为更新频率,以省市县三级行政区划作为统计单元,制作高质量夜间灯光数据。

Sunny9qx的博客 3307

JS DOM2(DOM编程)

一、DOM树 document也是一个元素(Element)对象,document是网页中最大的父级元素。 ​ 二.document对象常用方法 方法:getElementById() 返回对拥有指定id的第一个对象的引用 getElementsByName() 返回带有指定名称的对象的集合 getElementsByTagName() 返回带有指定标签名的对象的集合 getElementsBy...

小菜儿前端的博客 696

华为数通---配置风暴控制案例

风暴控制可以通过阻塞报文或关闭端口来阻断广播、未知组播和未知单播报文的流量。

2301_77081516的博客 1624

2_DOM(DOM编程艺术)

3. DOM 3.1 文档:“D” 3.2 对象:“O” 3.3 模型:“M” 3.4 节点 文档是由节点构成的集合,只不过此时的节点是文档树上的数值和树叶而已 3.4.1 元素节点 body、p、ul之类的元素,在文档中的布局形成了文档的结构 标签的名字就是元素的名字 元素可以包含其他的元素。事实上,没有包含在其他元素里的唯一元素是html元素,它是我们节点树的根元素 3.4.2 文本节点 绝大多数内容都是由文本提供的 在XHTML文档里,文本节点总是被包含在元素节点的内部,但并非所有的元素节点都包含有文

cheng_09的博客 338

S7-1200g2运动控制实战:从轴组配置到程序调试

本文详细介绍了S7-1200g2运动控制功能的实战应用,从轴组配置到程序调试的全流程。通过TIA Portal中的工艺对象配置,实现单轴、同步轴组等运动控制模型,并分享常见问题排查与性能优化经验,帮助工程师快速掌握中小型自动化设备的运动控制技术。

weixin_28698059的博客 587

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 402

【亲测免费】 《JavaScript DOM编程艺术(第2版)》资源文件下载

《JavaScript DOM编程艺术(第2版)》资源文件下载 【下载地址】JavaScriptDOM编程艺术第2版资源文件下载 探索JavaScript与DOM编程的奥秘,本开源项目为您提供《JavaScript DOM编程艺术(第2版)》的完整资源,包括随书光盘的源代码和电子书PDF。这些资源是Web开发人员学习和实...

gitblog_06739的博客 652

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 355

《JavaScript DOM 编程艺术 第 2 版》

第 5 章 最佳实践 平稳退化:现在基本所有带交互的网站都使用 Ajax,SAP 也火起来了,平稳退化真是很难实现了(看到第七章发现我之前的观点是错了) 分离 JS 向下兼容 性能考虑 第 6 章 案例研究:图片库改进版 键盘访问(提高可访问性) onclick 已经帮我们处理了,eg:下面这个绑定了 onclick 的按钮鼠标左键点击和 tab 然后回车一样弹出 "clicked...

anleng6817的博客 153

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

DOM编程(2)操作节点

文章目录一、操作DOM1.DOM元素特性和属性的区别(1)获取元素的所有特性二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一、操作DOM 示例:pan

hgc2020的博客 228

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

5、BOM编程 DOM编程(2)

DOM创建新节点document.createElement("标签名") 创建新元素节点 elt.setAttribute("属性名", "属性值") 设置属性 elt.appendChild(e) 添加元素到elt中最后的位置 elt.insertBefore(new, child); 添加到elt中,child之前。

guanhang89的专栏 4420

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaScript DOM编程艺术(第2版)的简单总结

介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript、DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发。 下面介绍一下各章节的讲到的内容。 第1章 JavaScript简史 本章主要讲解JavaScript的发展简史、不同的浏览器会采用不同的办法来完成一样的任务,这会影响JavaScript的发展,而DOM标准化,让这种情况有所改变。而本书要讲的就是JavaScript和DOM一起完成的任务,不需要讨论浏览器。 第2章

Shadow_killers的专栏 461

Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化 DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3的背景来历 首先DOM1级主要定义的是HTML和X...

巽秋的博客 132

前端3DOM编程2——DOM事件

目录 1、事件流 2、事件注册与触发 3、事件对象 4、事件分类 5、事件代理 五、DOM事件 事件,是用户或浏览器自身执行的某种动作。当在网页上操作时,比如点击一个DOM元素、键盘按下一个键、输入框输入内容、页面加载完成等,都会触发DOM事件。 1、事件流 DOM事件流即DOM事件处理执行的过程,为了判断页面的哪一部分会拥有特定的事件。W3C对DOM事件流作了规范的定义,主要分...

yaocong1993的博客 352

JavaScript Dom编程 ——2

这个还是接着这篇文章写的 那一篇写得太长了,编辑器有点吃不消,所以又新开了一篇 nodetype取值 图片参考自

include_heqile的博客 551

前端学习之DOM编程-解除DOM2事件绑定

HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序。事件通常与函数结合使用,函数不会在事件发生前被执行!(如用户点击按钮)。

banliyaoguai的博客 357

Javascript DOM 编程艺术(第2版)

数组 var beatles = Array(4); Beatles [0] = ‘John’; var beatles = [‘John’,’Paul’,’Gorge’]; 对象 var lenmon = Object(); lemon.classname = ‘John’; var lemon = {name:”John”,year:1940,living:false} ...

weixin_38092043的博客 294
上一篇: flex基础 actionscript
下一篇: ajax异步传输json格式的例子
bart2011
博客等级 码龄16年 10粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值