HTML DOM的学习与复习

14 篇文章 0 订阅
2 篇文章 0 订阅

HTML DOM 定义了访问和操作 HTML 文档的标准。

一、HTML DOM简介

1.DOM
DOM 是 W3C(万维网联盟)的标准。
DOM 是 Document Object Model(文档对象模型)的缩写。

DOM 定义了访问 HTML 和 XML 文档的标准:

“W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。”

W3C DOM 标准被分为 3 个不同的部分:
●核心 DOM - 针对任何结构化文档的标准模型
●XML DOM - 针对 XML 文档的标准模型
●HTML DOM - 针对 HTML 文档的标准模型

2.HTML DOM
HTML DOM 是:
●HTML 的标准对象模型
●HTML 的标准编程接口
●W3C 标准

HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。

换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

3.HTML DOM节点
HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:
在这里插入图片描述
通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。

在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。

DOM 节点
根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
●整个文档是一个文档节点
●每个 HTML 元素是元素节点
●HTML 元素内的文本是文本节点
●每个 HTML 属性是属性节点
●注释是注释节点

二、HTML DOM方法和属性

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

1.编程接口

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。

所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。
方法是您能够执行的动作(比如添加或修改元素)。
属性是您能够获取或设置的值(比如节点的名称或内容)。

2.一些DOM对象属性

(1) innerHTML - 节点(元素)的文本值
获取元素内容的最简单方法是使用 innerHTML属性。
innerHTML属性对于获取或替换 HTML元素的内容很有用。

点击此处,查看例子

(2)parentNode - 节点(元素)的父节点

(3)childNodes - 节点(元素)的子节点

(4)attributes - 节点(元素)的属性节点

(5) nodeName 属性
nodeName 属性规定节点的名称。
nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 与属性名相同
文本节点的 nodeName 始终是 #text
文档节点的 nodeName 始终是 #document

注释:nodeName 始终包含 HTML 元素的大写字母标签名。

(6)nodeValue 属性
nodeValue 属性规定节点的值。
元素节点的 nodeValueundefinednull
文本节点的 nodeValue 是文本本身
属性节点的 nodeValue 是属性值

本篇最后一个点展示了nodeValue 属性的使用

获取元素的值
下面的例子会取回 <p id="intro"> 标签的文本节点值:

<html>
<body>

<p id="intro">Hello World!</p>

<script type="text/javascript">
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>

</body>
</html>

(7)nodeType 属性
nodeType 属性返回节点的类型(比如元素的节点类型是1)。nodeType 是只读的。
比较重要的节点类型有:
元素 :1
属性 :2
文本 :3
注释 :8
文档 :9

3.一些DOM对象方法(后续讲述)
方法描述
getElementById()返回带有指定 ID 的元素。
getElementsByTagName()返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName()返回包含带有指定类名的所有元素的节点列表。
appendChild()把新的子节点添加到指定节点。
removeChild()删除子节点。
replaceChild()替换子节点。
insertBefore()在指定的子节点前面插入新的子节点。
createAttribute()创建属性节点。
createElement()创建元素节点。
createTextNode()创建文本节点。
getAttribute()返回指定的属性值。
setAttribute()把指定属性设置或修改为指定的值。

三、HTML DOM访问

访问 HTML DOM - 查找 HTML 元素。

访问 HTML 元素(节点)
访问 HTML 元素等同于访问节点
可以不同的方式来访问 HTML 元素:
●通过使用 getElementById() 方法
●通过使用 getElementsByTagName() 方法
●通过使用 getElementsByClassName() 方

1.getElementById() 方法

getElementById() 方法返回带有指定 ID 的元素:
语法:
node.getElementById("id");

下面的例子获取 id=“intro” 的元素:

document.getElementById("intro");
2.getElementsByTagName() 方法

getElementsByTagName() 返回带有指定标签名的所有元素。

可以在本篇 六、HTML DOM 导航 中继续学习

3.getElementsByClassName() 方法

可以查找带有相同类名的所有 HTML 元素。

document.getElementsByClassName("intro");

上面的例子返回包含 class="intro" 的所有元素的一个列表。

四、HTML DOM 修改

修改 HTML = 改变HTML元素、属性、内容、CSS样式和事件(处理程序)。

1.HTML DOM 元素

添加、删除和替换 HTML 元素。

(1)创建新的HTML元素- appendChild()
appendChild() 方法:将新元素作为父元素的最后一个子元素进行添加。
思路:如需向 HTML DOM 添加新元素,首先必须创建该元素(元素节点),然后把它追加到已有的元素上。

<div id="d1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>

<script>
var para=document.createElement("p");              //创建元素节点p
var node=document.createTextNode("This is new.");  //创建文本节点
para.appendChild(node);                            //文本节点加到元素节点p

var element=document.getElementById("d1");         //引用d1节点
element.appendChild(para);                         //把元素节点p加到d1节点上
</script>

(2)创建新的 HTML 元素 - insertBefore()
insertBefore():在指定的子节点前面插入新的子节点。

<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>

<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);

var element=document.getElementById("div1");
var child=document.getElementById("p1");
element.insertBefore(para,child);
</script>

(3)删除已有的 HTML 元素-removeChild()
removeChild() : 删除子节点。
如需删除 HTML 元素,必须清楚该元素的父元素:

<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>

<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>

在不引用父元素div1的情况下删除某个元素:

var child=document.getElementById("p1");
child.parentNode.removeChild(child);

(4)替换 HTML 元素-replaceChild()
replaceChild() :替换子节点。

div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>

<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);

var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.replaceChild(para,child);
</script>
2.HTML DOM 内容

通过 HTML DOM,JavaScript 能够访问 HTML 文档中的每个元素。
(1)创建和改变 HTML 内容
改变元素内容的最简答的方法是使用 innerHTML 属性。

<p id="p1">Hello World!</p>

<script>
document.getElementById("p1").innerHTML="New text!";
</script>

(2)改变 HTML 样式
通过 HTML DOM,可以访问 HTML 对象的样式对象。

<p id="p2">Hello world!</p>

<script>
document.getElementById("p2").style.color="blue";
</script>

3.HTML DOM 事件

HTML DOM 允许 JavaScript 对 HTML 事件作出反应。
(1)对事件作出反应
当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。
如需在用户点击某个元素时执行代码,请把 JavaScript 代码添加到 HTML 事件属性中:onclick=JavaScript

HTML 事件的例子:
●当用户点击鼠标时
●当网页已加载时
●当图片已加载时
●当鼠标移动到元素上时
●当输入字段被改变时
●当 HTML 表单被提交时
●当用户触发按键时

在本例中,当用户点击时,会改变 <h1> 元素的内容:

<!DOCTYPE html>
<html>
<body>
<h1 onclick="this.innerHTML='hello!'">请点击这段文本!</h1>
</body>
</html>

点击此处,查看例子

(2)HTML 事件属性
如需向 HTML 元素分配事件,您可以使用事件属性。
button 元素分配一个 onclick 事件:

<button onclick="displayDate()">试一试</button>

在上面的例子中,当点击按钮时,会执行名为 displayDate 的函数。

(3)使用 HTML DOM 来分配事件
HTML DOM 可以使用 JavaScript 向 HTML 元素分配事件:

<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
</script>

在上面的例子中,名为 displayDate 的函数被分配给了 id="myButn" 的 HTML 元素。
当按钮被点击时,将执行函数。

(4)onload 和 onunload 事件
当用户进入或离开页面时,会触发 onloadonunload 事件。
onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。
onloadonunload 事件可用于处理 cookies。

<body onload="checkCookies()">

(5)onchange 事件
onchange 事件常用于输入字段的验证。
下面的例子展示了如何使用 onchange。当用户改变输入字段的内容时,将调用 upperCase() 函数。

<input type="text" id="fname" onchange="upperCase()">

(6)onmouseover 和 onmouseout 事件
onmouseoveronmouseout 事件可用于在鼠标指针移动到或离开元素时触发函数。

点击此处,查看例子

(7)onmousedown、onmouseup 以及 onclick 事件
onmousedownonmouseup 以及 onclick 事件是鼠标点击的全部过程。首先当某个鼠标按钮被点击时,触发 onmousedown 事件,然后,当鼠标按钮被松开时,会触发 onmouseup 事件,最后,当鼠标点击完成时,触发 onclick 事件。

点击此处,查看例子

五、HTML DOM 导航

通过 HTML DOM,您能够使用节点关系在节点树中导航。
HTML HTMLCollection 是HTML DOM 节点列表。

1.HTML DOM 节点列表

getElementsByTagName() 方法返回 HTMLCollection 对象(节点列表)。节点列表是一个节点数组。
HTMLCollection 对象是类数组的 HTML 元素列表(集合)。

语法:
node.getElementsByTagName("tagname");

例 1:返回包含文档中所有 <p> 元素的列表

 document.getElementsByTagName("p");

可以通过下标号访问这些节点。如需访问第二个 <p>,可以这么写:

y=x[1];

注释:下标号从 0 开始。

例 2:返回包含文档中所有 <p> 元素的列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等):

document.getElementById("main").getElementsByTagName("p");

点击此处,查看例子

2.HTML HTMLCollection 长度

length 属性定义节点列表中节点的数量( HTMLCollection中元素的数量)。
可以使用 length 属性来循环节点列表:

x=document.getElementsByTagName("p");  //获取所有p元素节点

for (i=0;i<x.length;i++) 
{
document.write(x[i].innerHTML);       //输出每个p元素的文本节点的值
document.write("<br />");
}

HTMLCollection 并非数组!
HTMLCollection 也许看起来像数组,但并非数组。
我们可以遍历列表并通过数字引用元素(就像数组那样)。
不过,我们无法对 HTMLCollection 使用数组方法,比如 valueOf()、pop()、push() 或 join()

3.导航节点关系

可以使用三个节点属性:parentNodefirstChild 以及 lastChild ,在文档结构中进行导航。
例如:firstChild 属性可用于访问元素的文本:

<p id="intro">Hello World!</p>

<script>
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>
4.DOM 根节点

这里有两个特殊的属性,可以访问全部文档:
●document.documentElement - 全部文档
●document.body - 文档的主体

<script>
alert(document.body.innerHTML);
</script>
5.childNodes 和 nodeValue

除了 innerHTML 属性,您也可以使用 childNodesnodeValue 属性来获取元素的内容。
下面的代码获取 id=“intro” 的

元素的值:

<p id="intro">Hello World!</p>

<script>
var txt=document.getElementById("intro").childNodes[0].nodeValue;
document.write(txt);
</script>

事件监听和动画待补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值