javascript----18

DOM的基本对象有5个:Document,Node,NodeList,Element和Attr。

Common node types :

Interface

nodeType constant

nodeType value

Element

Node.ELEMENT_NODE

1

Text

Node.TEXT_NODE

3

Document

Node.DOCUMENT_NODE

9

Comment

Node.COMMENT_NODE

8

DocumentFragment

Node.DOCUMENT_FRAGMENT_NODE

11

Attr

Node.ATTRIBUTE_NODE

2

此外,Document还包含了创建其它节点的方法,比如createAttribut()用来创建一个Attr对象。它所包含的主要的方法有:

createAttribute(String):用给定的属性名创建一个Attr对象,并可在其后使用setAttributeNode方法来放置在某一个Element对象上面。

createElement(String):用给定的标签名创建一个Element对象,代表XML文档中的一个标签,然后就可以在这个Element对象上添加属性或进行其它的操作。

createTextNode(String):用给定的字符串创建一个Text对象,Text对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的Text对象是这个Element对象的唯一子对象。

getElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签。

getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的那个对象。

Node对象是DOM结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到Node这个对象,而是用到诸如Element、Attr、Text等Node对象的子对象来操作文档。Node对象为这些对象提供了一个抽象的、公共的根。虽然在Node对象中定义了对其子节点进行存取的方法,但是有一些Node子对象,比如Text对象,它并不存在子节点,这一点是要注意的。Node对象所包含的主要的方法有:

appendChild(org.w3c.dom.Node):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。

getFirstChild():如果节点存在子节点,则返回第一个子节点,对等的,还有getLastChild()方法返回最后一个子节点。

getNextSibling():返回在DOM树中这个节点的下一个兄弟节点,对等的,还有getPreviousSibling()方法返回其前一个兄弟节点。

getNodeName():根据节点的类型返回节点的名称。

getNodeType():返回节点的类型。

getNodeValue():返回节点的值。

hasChildNodes():判断是不是存在有子节点。

hasAttributes():判断这个节点是否存在有属性。

getOwnerDocument():返回节点所处的Document对象。

insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。

removeChild(org.w3c.dom.Node):删除给定的子节点对象。

replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。

NodeList对象,顾名思义,就是代表了一个包含了一个或者多个Node的列表。可以简单的把它看成一个Node的数组,我们可以通过方法来获得列表中的元素:

GetLength():返回列表的长度。

Item(int):返回指定位置的Node对象。

Element对象代表的是XML文档中的标签元素,继承于Node,亦是Node的最主要的子对象。在标签中可以包含有属性,因而Element对象中有存取其属性的方法,而任何Node中定义的方法,也可以用在Element对象上面。

getElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。

getTagName():返回一个代表这个标签名字的字符串。

getAttribute(String):返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到getAttributeNodes()方法来得到一个Attr对象来进行进一步的操作。

getAttributeNode(String):返回一个代表给定属性名称的Attr对象。

Attr对象代表了某个标签中的属性。Attr继承于Node,但是因为Attr实际上是包含在Element中的,它并不能被看作是Element的子对象,因而在DOM中Attr并不是DOM树的一部分,所以Node中的getparentNode(),getpreviousSibling()和getnextSibling()返回的都将是null。也就是说,Attr其实是被看作包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其它的Node子对象相区别。

 文字必须保存在文本节点内。例如:在<year>2005</year>中,包含一个元素节点(year),在它的下面包含了一个文字节点,其中的文字为(2005)。

<? xml version="1.0" encoding="UTF-8"  ?>  
< bookstore >
< book  category ="COOKING" >
  
< title  lang ="en" > Everyday Italian </ title >  
  
< author > Giada De Laurentiis </ author >  
  
< year > 2005 </ year >  
  
< price > 30.00 </ price >  
  
</ book >
< book  category ="CHILDREN" >
  
< title  lang ="en" > Harry Potter </ title >  
  
< author > J K. Rowling </ author >  
  
< year > 2005 </ year >  
  
< price > 29.99 </ price >  
  
</ book >
< book  category ="WEB" >
  
< title  lang ="en" > XQuery Kick Start </ title >  
  
< author > James McGovern </ author >  
  
< author > Per Bothner </ author >  
  
< author > Kurt Cagle </ author >  
  
< author > James Linn </ author >  
  
< author > Vaidyanathan Nagarajan </ author >  
  
< year > 2003 </ year >  
  
< price > 49.99 </ price >  
  
</ book >
< book  category ="WEB" >
  
< title  lang ="en" > Learning XML </ title >  
  
< author > Erik T. Ray </ author >  
  
< year > 2003 </ year >  
  
< price > 39.95 </ price >  
  
</ book >
  
</ bookstore >
我们将使用getElementsByTagName("title")方法在“book.xml”文件中创建所有<title>元素节点列表。下面的图片展示了这个节点列表:

DOM node list

下述代码片段将获取来自于第一个<title>元素的文本:

getElementsByTagName("title")[0].childNodes[0].nodeValue

输出结果:

Everyday Italian

节点列表包含一个非常实用的属性:length [ 长度 ]。length [ 长度 ] 属性返回了节点列表中的节点数量。

getElementsByTagName('title').length
下述代码片段将获取来自于第一个<title>元素的属性数量:
 
 
getElementsByTagName('title')[0].attributes.length


输出结果:

1

getNamedItem()方法可以用于获取一个指定的节点。

下述代码片断将展示输出每个<book> 元素中“category”属性的值的方法:

xmlDoc=loadXMLDoc("books.xml");
var x=xmlDoc.getElementsByTagName("book");
for(i=0;i<x.length;i++)
{
//the attlist variable will hold a NamedNodeMap
var attlist=x.item(i).attributes;
var att=attlist.getNamedItem("category");
document.write(att.value + "<br />")
}

输出结果:

COOKING
CHILDREN
WEB
WEB

下述案例说明了“<note>”子节点的循环方法,并打印了指定的节点名称和节点值:
<html>
<body>
<script type="text/javascript">
var text="<note>";
text=text+"<to>Tove</to>";
text=text+"<from>Jani</from>";
text=text+"<heading>Reminder</heading>";
text=text+"<body>Don't forget me this weekend!</body>";
text=text+"</note>";
// code for IE
if (window.ActiveXObject)
{
var doc=new ActiveXObject("Microsoft.XMLDOM");
doc.async="false";
doc.loadXML(text);
}
// code for Mozilla, Firefox, Opera, etc.
else
{
var parser=new DOMParser();
var doc=parser.parseFromString(text,"text/xml");
}
// documentElement always represents the root node
var x=doc.documentElement;
for (i=0;i<x.childNodes.length;i++)
{
document.write(x.childNodes[i].nodeName);
document.write("=");
document.write(x.childNodes[i].childNodes[0].nodeValue);
document.write("<br />");
}
</script>
</body>
</html>

输出结果:

to=Tove
from=Jani
heading=Reminder
body=Don't forget me this weekend!

获取一个元素值:

该案例将通过getElementsByTagname()方法来获得"book.xml"中的所有"title"元素值。

获取一个属性值:

该案例将通过getAttribute()方法来获得"book.xml"中所有"category"的属性值。

xmlDoc=loadXMLDoc("books.xml");
var x=xmlDoc.getElementsByTagName('book');
for (i=0;i<x.length;i++)
{
document.write(x[i].getAttribute('category'));
document.write("<br />");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值