(学习笔记)DOM节点

HTML文档被描述为标准的W3C DOM,所以用户可以使用w3c推荐的DOM接口来处理HTML文档.
使用W3C DOM处理HTML文档的关键在于理解节点,因为DOM将HTML文档中的每个内容都描述为节点,不同的内容使用不同类型的节点.

JavaScript DOM API 的节点类型

在DOM文件中,每一个节点都属于一种类型,可以使用Node.nodeType属性获取节点类型,DOM规范共定义了12中节点类型,可以使用node接口定义的常量来表示,也可以使用数字来表示.
(IE浏览器直到IE9才支持用常量表示,所以最好使用数字表示).

节点类型常量值+描述
Node.ELEMENT_NODE1元素节点
Node.ATTRIBUTE_NODE2属性节点
Node.TEXT_NODE3文本节点
Node.CDATA_SECTION_NODE4CDATA节点
Node.ENTITY_REFERENCE_NODE5实体引用节点
Node.ENTITY_NODE6实体节点
Node.PROCESSING_INSTRUCTION_NODE7处理指令节点
Node.COMMENT_NODE8注释节点
Node.DOCUMENT_NODE9文档节点
Node.DOCUMENT_TYPE_NODE10文档类型节点
Node.DOCUMENT_FRAGMENT_NODE11文档片段节点
Node.NOTATION_NODE12符号节点

节点的层次关系
(1)父节点(Parent Node)
每个元素都有一个父节点,除非是根元素
(2)子节点(Child Nodes)
(3)同胞节点(Sibling Nodes)
(4)祖辈节点(Ancestor Nodes)
(5)后代节点(Descendant Nodes)

节点及其对应的接口

接口名功能描述
Attr表示一个属性节点
CDATASection表示一个CDATA节点
Comment表示注释节点
Document表示整个HTML文档或HTML文档
DocumentFragment表示文档片段节点
DocumentType表示文档类型节点
Element表示元素节点
Entity表示实体节点
EntityRference表示实体引用节点
Notation表示DTD表示法节点
ProcessingInstruction表示处理指令节点
Text表示文本节点
集合类型接口功能描述
NamedNodeMap表示可以通过名称访问节点的集合
NameList提供对并行的名称和命名空间值对(可以为null)的有序集合的抽象,无需定义或约束如何实现该集合
NodeList提供对节点的有序集合的抽象,没有定义或约束如何实现该对象.

不需要记住那么多的接口,只要有大概的印象即可,但有三个对象称为基本的DOM对象必须要记住:

对象说明
Node文档的每个节点,都有自己的Node对象
NodeList这是Node对象列表
NamedNodeMap允许按名称(不是按索引)访问所有对象

基本的节点处理

一旦解析了HTML文档为DOM,那么HTML文档在内存中就表现为各种节点,使用标准的接口定义就可以进行处理.
Node是整个DOM的基接口,它表示该文档树中的单个节点.Node定义了很多方法和属性供所有子接口所实现的对象使用.

方法名功能描述
appendChild()在子节点末尾添加一个子节点
cloneNode()克隆一个节点
hasAttributes()检查该节点是否有属性
hasChildNodes()检查该节点是否有子节点
insertBefort()在引用的节点之前添加一个新节点
inSupported()检查该节点是否被版本支持
normalize()规格化该节点
removeChild()在子节点列表中删除一个子节点
replaceChild()替换一个子节点
属性描述
nodeName返回节点名
nodeValue返回和设置节点值
nodeType返回节点类型
parentNode父节点
childNodes返回所有子节点
firstChild第一个子节点
lastChild最后一个子节点
perviousSibling紧挨着当前子节点的前一个子节点
nextSibling紧挨着当前子节点的后一个子节点
attributes返回当前节点的所有属性
ownerDocument返回当前节点对应的文档对象
namespaceURL返回该节点的命名空间URL
prefix返回当前节点的命名空间前缀
localName返回当前节点的限定名的前缀部分

HTML文档解析后所得到的文档就是Document节点,可以使用window.document获取,document表示的是整个HTML文档,一般应该用该接口的documentElement属性获取该文档的根节点,也就是HTML元素的节点.

var root=document.documentElement;

根节点是一个元素节点,可以使用很多种方法获取根节点下的子节点,例如下面代码使用firstChild属性获取第一个子节点:

var node=root.firstChild;

在获取子节点之前,一般应该检查是否有子节点(例如,text类型的节点就没有子节点).

if(root.hasNodes()){
	//代码片段
}

可以配合使用firstChild和nextSubling遍历所有子节点.

if(root.hasNodes()){
	var node=root.firstChild();
	while(node!=null){
		alert(node.innerHTML;
		node=node.nextSubling;
	}
}

另外,也可以使用childNodes属性一次获取该节点的所有子节点,然后使用循环语句遍历.

if(root.hasNodes()){
	var nodelist=root.childNodes;
	var node;
	for(var i=0;i<nodelist.length:i++){
		node=nodelist[i];
		alert(node.innerHTML);
	}
}

使用getElementByTagName()方法可以返回具有给定元素名称的所有后代元素组成的NodeList,然后可以使用循环遍历这些元素,例如下面代码:

if(root.hasNodes()){
	var nodelist=root.getElementByTagName("div");
	var nodeLen=node.length;
	for(var i=0;i<nodeLen;i++){
		node=nodelist[i];
		alert(node.innerHTML);
	}
}
节点名,节点值和属性

使用Node定义的nodeName,nodeValue和attributes属性,可以分别获取节点的节点名,节点值,和属性.
使用Node定义的 nodeName;nodeValue,attributes属性可以分别获取节点的节点名,节点值,和属性(只有Element节点可获取NamedNodeMap).

删除HTML文档中的元素节点,属性和内容
  1. 从DOM中删除子元素节点.
    若要删除节点,可以使用removeChild()方法,删除节点时,该方法该方法删除属于所删除节点的子数,语法格式如下:
	oldChild=node.removeChild(sChildName);
  1. 删除DOM中元素节点的属性.
    (1)使用Element.removeAttribute()方法可以按名称删除当前节点的指定属性,语法格式如下:
	element.removeAttribute(sName);

(2)使用removeAttributeNode()方法可以删除元素节点中的属性节点,这必须首先获得对属性节 点的引用,然后才能删除它,如下:

var aNode=document.getElementById("oDiv");
var attr_id=aNode.getAttributeNode("id");
aNode.removerAttributeNode(attr_id);
  1. 删除DOM元素中的文本内容.
    同样的原理,也可以删除元素的内容,这些内容其实是文本节点,首先获取对文本节点的引用,然后使用removeChild()删除文本节点即可.
替换节点

使用replaceChild()方法可以替换原有节点,以实现改变元素内容的目的.如下:

var aNode=document.getElementById("oDiv");
var oTextNode=document.createTestNode("这是新内容");
aNode.replaceChild(oTextNode,aNode.first);

主要接口的使用

除了Node,其他介个与HTML文档中节点类型对应的接口也各自定义了自己独特的方法,它们几乎都继承自Node(除DOMException,DOMImplementation,NamedNodeMap,NodeList).

Document接口

Document接口继承自Node,表示整个HTML文档,从概念上讲,Document是文档树的根,并提供对文档数据的基本访问.
使用该接口定义的方法,可以使用documentElement属性获取文档的根节点,也可以使用doctype属性获取文档的类型声明,还可以创建各种类型的节点,然后将这些节点添加到文档树,所创建的属性一般都有ownerDocument属性(该属性从Node接口继承),该属性将节点对象与创建这些对象的Document关联起来.

  1. 创建新节点
    doucument对象具有一些用于创建不同节点类型所需的createXXX()方法,使用这些方法便可以轻松创建该节点,下面列出的方法需要填充名称和创建其他参数以创建相应的节点,其语法格式如下:
oElementNode=document.createElement(sTagName);
oTextNode=document.createTextNode(sTextName);
oAttribute=document.createAttribute(sName);
oComment=document.createCommnet(sData);
oNewDoc=document.createDocumnetGragment();
  1. 成员简介

Documnet定义的属性成员和方法成员分别如下表所示:

属性名描述
doctype文档类型声明
documentElement获取文档根元素
implementation取得DOMImplementation对象用于处理文档
方法名描述
createAttribute()创建属性节点
createAttributeNS()创建一个属性节点,并且该属性节点和一个命名空间相关联
createCDATASection()创建cdata节点
createComment()创建注释节点
createDocumentFragement()创建文档片段
createElement()创建元素节点
createElementNS()创建元素节点,并且该元素节点和一个命名空间相关联
createEntityReference()创建实体引用节点
createProcessingInstruction()创建PI节点
createTextNode()创建文本节点
getElementById()根据ID属性搜索一个元素
getElementsByTagName()根据标签名搜索所有元素
getElementsByTagNameNS()根据特定命名空间内的标签搜索所有元素
importNode()导入一个节点到当前元素
Attr接口

Attr接口表示Element对象中的属性节点,一个Attr对象就是一个属性节点.
可以使用Element接口的getAttributeNode()/getAttributeNodeNS()方法获取一个指定的属性节点,而后使用Attr接口定义的方法读取属性.
图片是在W3c找到的
注意:由于Attr节点实际不是Element的子节点,因此DOM不会将它们看作文档树的一部分,因此,当对Attr对象调用Node接口继承属性parentNode/perviousSibling/nextSilbing时,会返回null.
其余节点就不一一结束了,可以去w3cschool看详细介绍
W3C

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值