HTML DOM 定义了访问和操作HTML文档的标准方法。
HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)。
![](d3e3c417-b82e-4aca-8ac4-ab6276c4c4f0_0_files/58681710.png)
DOM 被分为不同的部分(核心、XML及HTML)和级别(DOM Level 1/2/3):
-
Core DOM
- 定义了一套标准的针对任何结构化文档的对象 XML DOM
- 定义了一套标准的针对 XML 文档的对象 HTML DOM
- 定义了一套标准的针对 HTML 文档的对象。
getElementById() 和 getElementsByTagName()
getElementById() 和 getElementsByTagName() 这两种方法,可查找整个 HTML 文档中的任何 HTML 元素。
这两种方法会忽略文档的结构。假如您希望查找文档中所有的 <p> 元素,getElementsByTagName() 会把它们全部找到,不管 <p> 元素处于文档中的哪个层次。同时,getElementById() 方法也会返回正确的元素,不论它被隐藏在文档结构中的什么位置。
这两种方法会向您提供任何你所需要的 HTML 元素,不论它们在文档中所处的位置!
getElementById() 可通过指定的 ID 来返回元素:
getElementById() 语法
document.getElementById("ID");
注释:getElementById() 无法工作在 XML 中。在 XML 文档中,您必须通过拥有类型 id 的属性来进行搜索,而此类型必须在 XML DTD 中进行声明。
getElementsByTagName() 方法会使用指定的标签名返回所有的元素(作为一个节点列表),这些元素是您在使用此方法时所处的元素的后代。
getElementsByTagName() 可被用于任何的 HTML 元素:
getElementsByTagName() 语法
document.getElementsByTagName("标签名称");
或者:
document.getElementById('ID').getElementsByTagName("标签名称");
实例 1
下面这个例子会返回文档中所有 <p> 元素的一个节点列表:
document.getElementsByTagName("p");
实例 2
下面这个例子会返回所有 <p> 元素的一个节点列表,且这些 <p> 元素必须是 id 为 "maindiv" 的元素的后代:
document.getElementById('maindiv').getElementsByTagName("p");
节点列表(nodeList)
当我们使用节点列表时,通常要把此列表保存在一个变量中,就像这样:
var x=document.getElementsByTagName("p");
现在,变量 x 包含着页面中所有 <p> 元素的一个列表,并且我们可以通过它们的索引号来访问这些 <p> 元素。
注释:索引号从 0 开始。
您可以通过使用 length 属性来循环遍历节点列表:
var x=document.getElementsByTagName("p"); for (var i=0;i<x.length;i++) { // do something with each paragraph }
您也可以通过索引号来访问某个具体的元素。
要访问第三个 <p> 元素,您可以这么写:
var y=x[2];
parentNode、firstChild以及lastChild
这三个属性 parentNode、firstChild 以及 lastChild 可遵循文档的结构,在文档中进行“短距离的旅行”。
请看下面这个 HTML 片段:
<table> <tr> <td>John</td> <td>Doe</td> <td>Alaska</td> </tr> </table>
在上面的HTML代码中,第一个 <td> 是 <tr> 元素的首个子元素(firstChild),而最后一个 <td> 是 <tr>元素的最后一个子元素(lastChild)。
此外,<tr> 是每个 <td>元 素的父节点(parentNode)。
对 firstChild 最普遍的用法是访问某个元素的文本:
var x=[a paragraph]; var text=x.firstChild.nodeValue;
parentNode 属性常被用来改变文档的结构。假设您希望从文档中删除带有 id 为 "maindiv" 的节点:
var x=document.getElementById("maindiv"); x.parentNode.removeChild(x);
首先,您需要找到带有指定 id 的节点,然后移至其父节点并执行 removeChild() 方法。
根节点
有两种特殊的文档属性可用来访问根节点:
- document.documentElement
- document.body
第一个属性可返回存在于 XML 以及 HTML 文档中的文档根节点。
第二个属性是对 HTML 页面的特殊扩展,提供了对 <body> 标签的直接访问。
创建和增加节点
createElement(tagName) 按照给定的标签名称创建一个新的元素节点
appendChild(nodeName) 向已存在节点列表的末尾添加新的子节点
insertBefore(newNode,oldNode) 向指定的节点之前插入一个新的子节点
cloneNode(deep) 复制某个指定的节点
实例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function newNode(){
var oldNode=document.getElementById("sixty1"); //访问插入节点的位置
var image=document.createElement("img"); //创建一个图片节点
image.setAttribute("src","images/79043_12541923138NPD.png"); //设置图片路径
document.body.insertBefore(image,oldNode); //插入图片到sixty1前面
}
function copyNode(){
var image=document.getElementById("sixty1"); //访问复制的节点
var copyImage=image.cloneNode(false); //复制指定的节点
document.body.appendChild(copyImage); //在页面最后增加节点
}
</script>
</head>
<body>
<input id="b1" type="button" value="增加一幅图片" οnclick="newNode()" />
<input id="b2" type="button" value="复制图片" οnclick="copyNode()" />
<img src="images/79043_12541923132KUt.png" id="sixty1" alt="白" />
<img src="images/79043_12541923138NPD.png" id="sixty2" alt="黑" />
</body>
</html>
删除和替换节点
removeChild(node) 删除指定的节点
replaceChild(newNode,oldNode) 用其他的节点替换指定的节点
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function delNode(){
var dNode=document.getElementById("w"); //访问被删除的节点
document.body.removeChild(dNode);
}
function repNode(){
var oldimage=document.getElementById("b"); //访问被替换的节点
var newimage=document.createElement("img");//创建一个图片节点
newimage.setAttribute("src","images/w.png"); //设置图片路径
document.body.replaceChild(newimage,oldimage); //替换原来的图片
}
</script>
</head>
<body>
<input id="b1" type="button" value="删除图片" οnclick="delNode()" />
<input id="b1" type="button" value="替换图片" οnclick="repNode()" /><br />
<img src="images/w.png" id="w" alt="白" />
<img src="images/b.png" id="b" altt="黑" />
</body>
</html>
Table 对象集合
集合 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
cells[] | 返回包含表格中所有单元格的一个数组。 | 5 | 1 | 1 | No |
rows[] | 返回包含表格中所有行的一个数组。 | 4 | 1 | 9 | Yes |
tBodies[] | 返回包含表格中所有 tbody 的一个数组。 | 4 | Yes |
Table 对象属性
属性 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
align | 表在文档中的水平对齐方式。(已废弃) | - | - | - | - |
bgColor | 表的背景颜色。(已废弃) | - | - | - | - |
border | 设置或返回表格边框的宽度。 | 4 | 1 | 9 | Yes |
caption | 对表格的 <caption> 元素的引用。 | 4 | 1 | 9 | Yes |
cellPadding | 设置或返回单元格内容和单元格边框之间的空白量。 | 4 | 1 | 9 | Yes |
cellSpacing | 设置或返回在表格中的单元格之间的空白量。 | 4 | 1 | 9 | Yes |
frame | 设置或返回表格的外部边框。 | 4 | 1 | 9 | Yes |
id | 设置或返回表格的 id。 | 4 | 1 | 9 | Yes |
rules | 设置或返回表格的内部边框(行线)。 | 4 | 1 | 9 | Yes |
summary | 设置或返回对表格的描述(概述)。 | 6 | 1 | 9 | Yes |
tFoot | 返回表格的 TFoot 对象。如果不存在该元素,则为 null。 | 4 | 1 | 9 | Yes |
tHead | 返回表格的 THead 对象。如果不存在该元素,则为 null。 | 4 | 1 | 9 | Yes |
width | 设置或返回表格的宽度。 | 4 | 1 | 9 | Yes |
标准属性
属性 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
className | 设置或返回元素的 class 属性。 | 5 | 1 | 9 | Yes |
dir | 设置或返回文本的方向。 | 5 | 1 | 9 | Yes |
lang | 设置或返回元素的语言代码。 | 5 | 1 | 9 | Yes |
title | 设置或返回元素的 title 属性。 | 5 | 1 | 9 | Yes |
Table 对象方法
方法 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
createCaption() | 为表格创建一个 caption 元素。 | 4 | 1 | 9 | Yes |
createTFoot() | 在表格中创建一个空的 tFoot 元素。 | 4 | 1 | 9 | Yes |
createTHead() | 在表格中创建一个空的 tHead 元素。 | 4 | 1 | 9 | Yes |
deleteCaption() | 从表格删除 caption 元素以及其内容。 | 4 | 1 | 9 | Yes |
deleteRow() | 从表格删除一行。 | 4 | 1 | 9 | Yes |
deleteTFoot() | 从表格删除 tFoot 元素及其内容。 | 4 | 1 | 9 | Yes |
deleteTHead() | 从表格删除 tHead 元素及其内容。 | 4 | 1 | 9 | Yes |
insertRow() | 在表格中插入一个新行。 | 4 | 1 | 9 | Yes |
TableRow 对象
TableRow 对象代表一个 HTML 表格行。
在 HTML 文档中 <tr> 标签每出现一次,一个 TableRow 对象就会被创建。
IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 标准.
TableRow 对象集合
集合 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
cells[] | 返回包含行中所有单元格的一个数组。 | 4 | 1 | 9 | Yes |
TableRow 对象属性
属性 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
align | 设置或返回在行中数据的水平排列。 | 4 | 1 | 9 | Yes |
ch | 设置或返回在行中单元格的对齐字符。 | Yes | |||
chOff | 设置或返回在行中单元格的对齐字符的偏移量。 | Yes | |||
id | 设置或返回行的 id。 | 4 | 1 | 9 | Yes |
innerHTML | 设置或返回行的开始标签和结束标签之间的 HTML。 | 5 | 1 | 9 | No |
rowIndex | 返回该行在表中的位置。 | 4 | 1 | 9 | Yes |
sectionRowIndex | 返回在 tBody 、tHead 或 tFoot 中,行的位置。 | Yes | |||
vAlign | 设置或返回在行中的数据的垂直排列方式。 | 4 | 1 | 9 | Yes |
TableRow 对象方法
方法 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
deleteCell() | 删除行中的指定的单元格。 | 4 | 1 | 9 | Yes |
insertCell() | 在一行中的指定位置插入一个空的 <td> 元素。 | 4 | 1 | 9 | Yes |
TableCell 对象
TableCell 对象代表一个 HTML 表格单元格。
在一个 HTML 文档中 <td> 标签每出现一次,一个 TableCell 对象就会被创建。
IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 标准.
TableCell 对象属性
属性 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
abbr | 设置或返回单元格中内容的缩写版本。 | 6 | 1 | 9 | Yes |
align | 设置或返回单元格内部数据的水平排列方式。 | 4 | 1 | 9 | Yes |
axis | 设置或返回相关单元格的一个逗号分隔的列表。 | 6 | 1 | 9 | Yes |
cellIndex | 返回单元格在某行的单元格集合中的位置。 | 4 | 1 | 9 | Yes |
ch | 设置或返回单元格的对齐字符。 | Yes | |||
chOff | 设置或返回单元格的对齐字符的偏移量。 | Yes | |||
colSpan | 单元格横跨的列数。 | 4 | 1 | 9 | Yes |
headers | 设置或返回 header-cell 的 id 值。 | Yes | |||
id | 设置或返回单元格的 id。 | 4 | 1 | 9 | Yes |
innerHTML | 设置或返回单元格的开始标签和结束标签之间的 HTML。 | 4 | 1 | 9 | No |
rowSpan | 设置或返回单元格可横跨的行数。 | 4 | 1 | 9 | Yes |
scope | 设置或返回此单元格是否可提供标签信息。 | Yes | |||
vAlign | 设置或返回表格单元格内数据的垂直排列方式。 | 4 | 1 | 9 | Yes |
width | 设置或返回单元格的宽度。 | 4 | 1 | 9 | Yes |