认识 HTML DOM


目录

一、HTML DOM 树

1. HTML DOM 树

2. 节点

二、常用 DOM 对象属性与方法

1. 方法

2. 属性

三、DOM操作

四、DOM事件

五、总结


一、HTML DOM 树

1. HTML DOM 树

DOM即是Document Object Model(文档对象模型)的缩写。简单地讲,HTML DOM 定义了访问和操作 HTML 文档的标准方法,DOM 将 HTML 文档表达为树结构。换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

如下图1.1即为一个HTML文档的DOM结构图示。


图1.1 HTML DOM 树结构

2. 节点

在 HTML DOM 中,所有的事物都是节点。因而,上面图中,这棵树有许多的节点构成,所以也可以叫做节点树。如整个文档 Document 可以看做一个节点;HTML 元素,如 head、body、div 等也可以看做一个节点;同样,HTML 元素内的文本及 HTML 属性也可以看做文本节点与属性节点;甚至注释也可以看做注释节点。
节点树中的节点与节点之间之间拥有层级关系,如下图1.2所示。

图1.2 节点之间的关系

如下面的代码:

<!DOCTYPE html>
  <head>
    <title>我是标题</title>
  </head>
  <body>
    <h1>认识 HTML DOM </h1>
    <p>Hello world!</p>
  </body>
</html>

从上面的 HTML 中可以看出:

  • <html> 节点没有父节点;它是根节点
  • <head> 和 <body> 的父节点是 <html> 节点,<html> 节点拥有两个子节点<head> 和 <body>
  • 文本节点 "Hello world!" 的父节点是 < p > 节点
  • < h1 > 和 < p > 节点是同胞节点,同时也是 <body> 的子节点

二、常用 DOM 对象属性与方法

1.方法

方法就是可以在节点(HTML 元素)上执行的动作。

下面是一些比较常用的 DOM 对象方法:

  • getElementById(id):返回带有指定 ID 的元素。
  • getElementsByTagName(tag name):返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
  • getElementsByClassName(class name):返回包含带有指定类名的所有元素的节点列表。
  • appendChild(node):把新的子节点添加到指定节点。
  • removeChild(node):删除子节点。
  • replaceChild(node):替换子节点。
  • insertBefore(node):在指定的子节点前面插入新的子节点。
  • createAttribute():创建属性节点。
  • createElement():创建元素节点。
  • createTextNode():创建文本节点。
  • getAttribute(attribute):返回指定的属性值。
  • setAttribute(attribute,value):把指定属性设置或修改为指定的值。

2.属性

属性是节点(HTML 元素)的值,您能够获取或设置。

下面主要介绍比较常见的几个节点属性:

(1).innerHTML:元素内容

如下面的代码可以获取类名为“intro”的节点的内容值,并将它赋给变量txt:

var txt=document.getElementById("intro").innerHTML;

(2).nodeName:节点名称

  • 元素节点:标签名
  • 属性节点:属性名
  • 文本节点:#text
  • 文档节点:#document

(3).nodeValue:节点的值

  • 元素节点: undefined 或 null
  • 文本节点:文本本身
  • 属性节点:属性值

如下面的代码获取 ID 为 intro 的元素的文本节点的值,并将它写入文档输出流中:

document.write($("#intro").firstChild.nodeValue);

(4).nodeType:节点的类型

各种节点类型与对应的 nodeType 值为:元素:1;属性:2;文本:3;注释:8;文档:9。

(5).parentNode、firstChild、lastChild:节点之间的关系

依次为访问元素的父节点、第一个子节点、最后一个子节点。

(6).length:节点列表长度

如下面的代码,获取标签为 p 的节点组成一个节点列表,将该节点列表中的每一个元素的内容值写到文档输出流中:

x = document.getElementsByTagName("p");

for (i=0;i<x.length;i++) {
  document.write(x[i].innerHTML);
  document.write("<br />");
}

三、DOM操作

通过 DOM 的相关方法,可以修改 HTML,包括改变元素、属性、样式和事件等。

如:

document.getElementById("p1").innerHTML = "New text!";//修改 p1 元素文本节点的内容
document.getElementById("p2").style.color="blue";//修改 p2 元素的样式
var para = document.createElement("p");//接下来三句创建了新的元素如需向 HTML DOM 添加新元素,
var node = document.createTextNode("This is new.");//首先必须创建该元素(元素节点),
para.appendChild(node);//然后把它追加到已有的元素上。

除了 appendChild() 函数向一个父元素后面追加一个子元素之外,添加新元素也可以使用 insertBefore() 函数,直接往一个已存在的元素前面插入一个新元素:

var element = document.getElementById("div1");
var child = document.getElementById("p1");
element.insertBefore(para,child);//将新创建的元素 para 插入到已存在的元素 child 前面,但前提是他们用共同的父元素 element

当然,通过相关方法也可以删除一个元素:

var parent=document.getElementById("div1");//要删除一个元素,首先要获取要删除元素的父元素
var child=document.getElementById("p1");
parent.removeChild(child);

最后,若将上面代码的最后一句换为下面这句,则可以实现将 child 元素替换为 para 元素的操作。

parent.replaceChild(para,child);

由此可见,通过 DOM 可以十分方便地实现对 HTML 的各种操作,显得十分强大与灵活。

四、DOM事件

当事件发生时,比如当用户点击一个 HTML 元素时,可以执行相关的 JavaScript,这时,需要把 JavaScript 代码添加到 HTML 事件属性中。

图4.1 DOM 事件触发

下面是一些常见的事件属性:

  • 当用户点击鼠标时:onclick
  • 当网页已加载时:onload
  • 当元素获得焦点时:onfocus
  • 当鼠标移动到元素上与鼠标离开时:onmouseover与onmouseout
  • 鼠标按键按下与松开时:onmousedown与onmouseup

如下面的代码,点击按钮时,会执行函数 function() 里面的的 JavaScript 代码:

<button onclick = "displayDate()">显示时间</button>//鼠标点击按钮时执行displayDate() 函数

document.getElementById("myBtn").onclick = function(){……};//点击按钮执行函数 function 里面的 JavaScript 代码

五、总结

HTML DOM 可以实现在客户端使用脚本来创建动态网页,以此增强网页的交互性。上面介绍的是一些最常用的 DOM 的使用,具体的可以在实际的实践中,以及不断的查手册增强了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,751评论 1 92
  • Element 类型 除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了...
    劼哥stone阅读 630评论 0 3
  • 时间:2017年10月27日18:00 地点:北京路汇嘉时代三楼9.9意式披萨 主题:小马同学‍8岁啦!!!
    边城欣蓉阅读 235评论 0 0
  • 写在前面 最近终于抽出时间来对这篇文章进行更改了,在这个过程中多谢大家的指导和意见,当时写这篇文章的时候原本是想记...
    劉光軍_MVP阅读 13,377评论 42 128