第十章 DOM

 

DOM

DOM(文档对象模型):针对HTML和XML文档的一个API(应用程序编程接口)。DOM描绘了一个层次化的节点树,允许开发人员添加,移除和修改页面的某一部分。

节点层次

节点:节点分为几种不同的类型,每种类型分别表示文档中不同的信息及标记。每个节点都拥有各自的特短吧,数据,方法。

文档元素:文档元素是文档最外层的元素,文档中的其他所有元素都被包裹在文档元素中。在HTML中,文档元素始终是<html>元素。

 

HTML元素:元素节点。

特性: 特性节点。

文档类型:文档类型节点。

注释: 注释节点。

 

Node类型

JS中的所有类型节点都继承自Node类型,所有节点类型共享相同的基本属性和方法。

nodeName:  对于元素节点,nodeName中保存的都是元素的标签名,nodeValue的值始终为null.

nodeValue:  元素的值。

childNodes: 保存着一个nodeList对象。nodeList是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。有length属性。

基于DOM结构动态执行查询的结果,DOM结构的变化能够自动反映在NodeList对象中。

parentNode:指向childnode的父节点。

previousSibling: 节点的前一个同胞节点。

nextSibling: 节点的下一个同胞节点。

 

操作节点

插入节点

appendChild(): 向childNodes列表末尾添加一个节点。

insertBefore(): 接受俩个参数:要插入的节点, 参照的节点。被插入的节点变成参照节点的前一个同胞节点。

 

删除节点

replaceChild(): 接受俩个参数: 要插入的节点, 要替换的节点。

removeChild(): 接受一个参数: 移除的节点。

 

cloneNode():  复制一个调用这个方法的节点的一个副本。接受一个布尔值参数:表示是否执行深复制。true时,复制整个子节点树(只复制特性。子节点)。false时,只复制本身。

normalize(): 处理文档树种的文本节点。找到空文本阶段就按删除它。找到相邻的文本节点,将他们合并成为一个文本节点。

 

Document类型

document对象是HTMLDocumen(继承自Document)的一个实例.表示整个HTML页面。document对象是window对象的一个属性。

文档的子节点

documentElement: 始终指向HTML页面中的<HTML>元素。

 

文档信息:

document.title: 包含<title>元素中的文本。

URL: 包含页面完成的URL(地址栏中显示的URL)。

domain:  包含页面的域名

referrer: 保存着链接到当前页面的那个页面的URL。

var url = document.url;
//取得 完整的URL

var domain = document.domain;
//取得域名

var referrer = document.refeffer;
//取得来源页面的URL

 

Element类型

nodetype: 1;

nodeName: 元素的标签名;

nodeValue: null。

parentNode: 可能是document或Element;

element类型 提供对元素标签名,子节点及特性的访问。

html元素由HTMLElement类型表示,不是直接通过这个类型,也是通过它的子类型来表示。

操作特性的DOM方法有三个:

取得特性:getAttribute(), 特性的名称不区分大小写。

设置特性:setAttribute(),  接受2个参数: 要设置的特性名,值。如果特性已存在,会已指定的值替换现有的值。即可以操作HTML特性,也可以操作自定义特性。

移除特性:removeAttribute();

 

Text类型

nodetype: 3;

nodeName: #text;

nodeValue: 节点所包含的文本。

parentNode: 是一个Element;

不支持子节点。

length属性: 保存字符串的数目。

 

文本方法:

normalize:  合并文本节点,如果在一个包含2个或多个文本节点的父元素上调用,将所有文本节点成一个节点。

var element = document.createElement("div");
element.className = "message";
var textNode = document.createTextNode("Hello World!");
element.appendChild(textNode);

var anotherNode = document.createTextNode("Yippee!");
element.appendChild(anotherNode);
document.body.appendChild(element);
console.log(element.childNodes.length);
// 2  

element.normalize();
console.log(element.childNodes.length);
// 1

 

splitText(): 分割文本节点,将一个文本节点分为俩个,按照指定位置分割。 nodeValue值。原来的文本节点将包含从开始到指定位置之前的内容,新文本节点包含剩下的文本。这个方法会返回一个新文本节点。

var newNode = element.firstChild.splitText(5);
console.log(element.firstChild.nodeValue);
 console.log(newNode);
 // Hello
 // " World!Yippee!"

 

 

 

posted @ 2016-06-21 13:47  岳夏铭心  阅读(157)  评论(0编辑  收藏  举报