accp6.0 《使用javascript增强交互效果》学习笔记ch4 DOM高级编程

目标
1.使用getElement系列方法实现dom元素的查找和定位
2.使用Core Dom标准操作实现节点的增删改查
3.使用HTML DOM 特有操作实现HTML元素内容的修改
 
关键词 core 核心 attribute 属性  append 追加 node 节点 remove 删除 replace 替换
 
DOM 文档对象模型

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

 
DOM规定下的HTML文档
整个文档是一个文档节点
每个HTML标签都是一个元素节点
包含在HTML元素中的文本是文本节点
每个HTML属性都是一个属性节点
注释属于注释节点

HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)。

 

DOM 被分为不同的部分(核心、XML及HTML)和级别(DOM Level 1/2/3):

Core DOM
定义了一套标准的针对任何结构化文档的对象
XML DOM
定义了一套标准的针对 XML 文档的对象
HTML DOM
定义了一套标准的针对 HTML 文档的对象。
 
Core Dom的标准节点操作
1.查看节点
    1 .使用getElement系列方法访问指定的节点
        getElementById()
        getElementsByName();
        getElementsByTagName();
 

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];
 
    获取及改变节点属性的值
    getAttribute("属性名");
    setAttribute("属性名","属性值");
 
    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>





HTML DOM 的特有对象和操作
 
IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 标准.

Table 对象集合

集合描述IEFOW3C
cells[]返回包含表格中所有单元格的一个数组。511No
rows[]返回包含表格中所有行的一个数组。419Yes
tBodies[]返回包含表格中所有 tbody 的一个数组。4  Yes
 

Table 对象属性

属性描述IEFOW3C
align表在文档中的水平对齐方式。(已废弃)----
bgColor表的背景颜色。(已废弃)----
border设置或返回表格边框的宽度。419Yes
caption对表格的 <caption> 元素的引用。419Yes
cellPadding设置或返回单元格内容和单元格边框之间的空白量。419Yes
cellSpacing设置或返回在表格中的单元格之间的空白量。419Yes
frame设置或返回表格的外部边框。419Yes
id设置或返回表格的 id。419Yes
rules设置或返回表格的内部边框(行线)。419Yes
summary设置或返回对表格的描述(概述)。619Yes
tFoot返回表格的 TFoot 对象。如果不存在该元素,则为 null。419Yes
tHead返回表格的 THead 对象。如果不存在该元素,则为 null。419Yes
width设置或返回表格的宽度。419Yes

标准属性

属性描述IEFOW3C
className设置或返回元素的 class 属性。519Yes
dir设置或返回文本的方向。519Yes
lang设置或返回元素的语言代码。519Yes
title设置或返回元素的 title 属性。519Yes

Table 对象方法

方法描述IEFOW3C
createCaption()为表格创建一个 caption 元素。419Yes
createTFoot()在表格中创建一个空的 tFoot 元素。419Yes
createTHead()在表格中创建一个空的 tHead 元素。419Yes
deleteCaption()从表格删除 caption 元素以及其内容。419Yes
deleteRow()从表格删除一行。419Yes
deleteTFoot()从表格删除 tFoot 元素及其内容。419Yes
deleteTHead()从表格删除 tHead 元素及其内容。419Yes
insertRow()在表格中插入一个新行。419Yes
 

TableRow 对象

TableRow 对象代表一个 HTML 表格行。

在 HTML 文档中 <tr> 标签每出现一次,一个 TableRow 对象就会被创建。

IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 标准.

TableRow 对象集合

集合描述IEFOW3C
cells[]返回包含行中所有单元格的一个数组。419Yes

TableRow 对象属性

属性描述IEFOW3C
align设置或返回在行中数据的水平排列。419Yes
ch设置或返回在行中单元格的对齐字符。   Yes
chOff设置或返回在行中单元格的对齐字符的偏移量。   Yes
id设置或返回行的 id。419Yes
innerHTML设置或返回行的开始标签和结束标签之间的 HTML。519No
rowIndex返回该行在表中的位置。419Yes
sectionRowIndex返回在 tBody 、tHead 或 tFoot 中,行的位置。   Yes
vAlign设置或返回在行中的数据的垂直排列方式。419Yes

TableRow 对象方法

方法描述IEFOW3C
deleteCell()删除行中的指定的单元格。419Yes
insertCell()在一行中的指定位置插入一个空的 <td> 元素。419Yes

TableCell 对象

TableCell 对象代表一个 HTML 表格单元格。

在一个 HTML 文档中 <td> 标签每出现一次,一个 TableCell 对象就会被创建。

IE: Internet Explorer, F: Firefox, O: Opera, W3C: W3C 标准.

TableCell 对象属性

属性描述IEFOW3C
abbr设置或返回单元格中内容的缩写版本。619Yes
align设置或返回单元格内部数据的水平排列方式。419Yes
axis设置或返回相关单元格的一个逗号分隔的列表。619Yes
cellIndex返回单元格在某行的单元格集合中的位置。419Yes
ch设置或返回单元格的对齐字符。   Yes
chOff设置或返回单元格的对齐字符的偏移量。   Yes
colSpan单元格横跨的列数。419Yes
headers设置或返回 header-cell 的 id 值。   Yes
id设置或返回单元格的 id。419Yes
innerHTML设置或返回单元格的开始标签和结束标签之间的 HTML。419No
rowSpan设置或返回单元格可横跨的行数。419Yes
scope设置或返回此单元格是否可提供标签信息。   Yes
vAlign设置或返回表格单元格内数据的垂直排列方式。419Yes
width设置或返回单元格的宽度。419Yes

标准属性

属性描述IEFOW3C
className设置或返回元素的 class 属性。519Yes
dir设置或返回文本的方向。519Yes
lang设置或返回元素的语言代码。519Yes
title设置或返回元素的 title 属性。519Yes


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值