关于DOM的一些总结

DOM的诞生:随着XML(可扩展标记语言)的发展,出现了使用常见的编程语言(如JAVA)来同时表现和处理XML代码的需求。首先出现的是Java上的SAXSAX提供了一个基于事件的XML解析的APISAX解析器从文件的开头出发,从前向后解析,每当遇到起始标签或结束标签、特性、文本或者其他的XML语法时,就会出发一个事件。然后,当事件发生时,具体怎么做就由开发人员决定。虽然SAX仅仅还找文本的形式去解析他们,但是在解析的过程中,它无法停止、后退或者不从文件开始,直接访问XML的某个部分。这就催生了DOM的诞生。

DOM定义:DOM是针对XML的基于树的API,它关注的不仅仅是解析XML代码,而是使用一系列互相关联的对象来表示这些代码,而这些对象可以被修改和访问并且不需要重新去解析。使用DOM,只需解析一次代码来创建一个树的模型,在这个起始解析过程之后,XML已经通过DOM模型表现出来,同时不再需要原始的代码。

节点的层次:谈论DOM树实际上谈论的就是节点的层次

<?xml version=”1.0”?>

<employees>

  <!— employeeà

  <employee>

<name>Micheal Smith</name>

<position>Software</position>

<comment><![CDATA[birthday 8/14/]]</comment>

  </employee>

</employees>

生成的DOM

Node接口定义了一些所有节点都包含的特性和方法:

NodeName,nodeValue,nodeType,ownerDocument,firstChild,lastChild,previousSibling,nextSibling,hasChildNodes(),attributes,appendChild(node),removeChild(node),replaceChild(newnode,oldnode),insertBefore(newnode,refnode)

 

XHTM(HTML)DOM:基于XMLDOM技术成为核心DOM,在开发XML DOM的同时,W3C还一起开发了一种特别针对XHTML(HTML)DOM。这个DOM定义了一个HTMLDodument和一个HTMLElement作为这种实现的基础。

 

处理特性:即使Node接口已经具有attributes方法,且已被所有类型节点继承,然后,只有Element节点才能有特性。Element节点的attribites属性提供一些勇于访问和处理内容的方法:

getNamedItem(name)—返回nodeName属性值等于name的节点

removeNamedItem(name)—删除nodeName属性值等于name的节点

setNamedItem(node)—node添加到列表中,按其nodeName属性进行索引

item(pos)—NodeList一样,返回位置pos的节点

这四个方法都返回一个Attr节点,而非特性值

 

getAttribute(name)=attributes.getNamedItem(name).value;

setAttribute(name,newvalue= attributes.getNamedItem(name).value=newvalue

removeAttribute(name)=attributes.removeNamedItem(name)

 

访问指定的节点

1.       getElementsByTagName()//核心DOM方法

返回一个包含所有的tagName(标签名)特性等于某个指定值的NodeList(节点集合)

 

2.       getElementsByName()//HTML DOM方法

获取所有name特性等于指定值的NodeList

 

3.       getElementById()//HTML DOM方法

返回id特性等于指定值的元素

 

创建和操作节点

createElement(),createTextNode(),appendChild()

removeChild(),replaceChild(),insertBefore()

createDocumentFragment()//用于批量增加节点

 

 

HTML DOM特征功能

特性像属性一样:大部分情况下,HTML DOM元素中的所包含的所有特性都是可作为属性如:<img src=”mypicture.jpg” border=”0”>,oImg来引用这个标签

oImg..getAttribute(“src”)==oImg.src

唯一特性名和属性名不一样的是class特性,因为它在javascript是一个保留字,所以不能直接拿来作为属性,相应额属性名为className

 

Table方法

 

遍历DOM

NodeIterator(深度优先搜索)

使用doument对象的createNodeIterator()方法来创建NodeIterator对象,该方法接受的四个参数为:

1.       root—从书中搜索的那个节点

2.       whatToShow—数值代码,代表哪些节点需要访问

3.       filterNodeFilter对象,用来决定忽略哪些节点

4.       entityRegerenceExpansion—布尔值,表示是否需要扩展实体引用

 

TreeWalker

它有NodeIterator所有的功能,并且增加了一些遍历方法

1.       parentNode()—进入当前节点的父节点

2.       firstChild()—进入当前节点的第一个子节点

3.       lastChild()—进入当前节点的最后一个节点

4.       nextSibling()—进入当前节点的下一个兄弟节点

5.       previousSibling—进入当前节点的前一个兄弟节点  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值