现在的位置: 首页 > 综合 > 正文

javascriptDOM

2014年01月26日 ⁄ 综合 ⁄ 共 6258字 ⁄ 字号 评论关闭

javascriptDom

DOM:文档对象模型,是针对html和xml文档的一个API。描绘一个层次化的节点树,允许开发人员添加、移除、修改页面的某一个部分。

IE中所有的DOM对象都是以COM对象的形式实现的,这意味着IE的DOM对象与原生的javascript对象行为或活动不一致。

DOM层次:

<html>

         <head>

                   <title>SamplePage</title>

</head>

         <body>

                   <p>HelloWorld!</p>

</body>

</html>

 

文档元素:文档的节点即每个文档的跟节点。如<html>节点元素

Node类型:

javascript中所有的借点光类型都继承自Node类型,因此所有节点类型都共享着相同的基属性和方法。

每个节点都有一个nodeType属性,用于表名节点的类型,节点类型有在Node;类型中定义的12个数值常量来表示任何节点类型比居其一:

Node.ELEMENT_NODE:1

Node.ATTRIBUTE_NODE:2

Node.TEXT_NODE:3

Node.CDATA_SECTION_NODE:4

Node.ENTITY_REFERENCE_NODE:5

Node.ENTITY_NODE:6

Node.PROCESSING_INSTRUCTION_NODE:7

Node.COMMENT_NODE:8

Node.DOCUMENT_NODE:9

Node.DOCUMENT_TYPE_NODE:10

Node.DOCUMENT_FRAGMENT_NODE:11

Node.NOTATION_NODE:12

if(someNode.nodeType == Node.ELEMENT_NODE){

         alert(“nodeis an element”);          //在IE中无效

}

if(someNode.nodeType == 1){

         alert(“nodeis an element”);         //在所有浏览器中有效

}

nodeName和nodeValue属性

nodeName 属性含有某个节点的名称。

* 元素节点的 nodeName 是标签名称
* 属性节点的 nodeName 是属性名称
* 文本节点的 nodeName 永远是 #text
* 文档节点的 nodeName 永远是 #document

注释:nodeName 所包含的 XML 元素的标签名称永远是大写的.

nodeValue:

对于文本节点,nodeValue 属性包含文本。

对于属性节点,nodeValue 属性包含属性值。

nodeValue 属性对于文档节点和元素节点是不可用的。

节点关系:节点间的各种关系可以用传统的家族关系来描述,相当于把文档树比喻成家谱,每个节点都有一个childNodes属性,其中保存着一个NodeList对象。NodeList是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。

每个节点都有一个parentNode属性,该属性指向文档树中的父节点。包含在childNodes列表中的所有节点都有相同的父节点,因此他们的parentNode指向同一个引用(节点),chileNodes中所有节点间都属于同胞节点。

通过使用列表中每个节点的previousSibling和nextSibling属性,可以访问同一列表中其他节点。列表中第一个节点的previousSibling属性值为null,而列表中最后一个节点的nextSibling属性值同样为null。

if(someNode.nextSibling == null){

         alert(“Lastnode in the parent’s childNodes list”);

}else if(someNode.perviousSibling == null){

         alert(“Firstnode in the parent’s childNodes list”);

}

父节点与其最后一个节点之间也存在特殊关系。父节点的firstChild和lastChild属性分别指向器childNodes列表中的第一个和最后一节点。其中someNode.firstChild == someNode.childNodes[0],而someNode.lastChild== some.childNodes[some.childNodes.length -1]

关系如图所示:

操作节点:

添加节点:appendChild(),添加完成之后,childNodes的新增节点、父节点以及以前的最后一个子节点关系指针都会相应的更新。

如果传入到appendChild()中的节点已经是文档的一部分了,那么结果就是将该节点从原来位置转移到新位置。即使可以将DOM树看成由一系列指针连接起来的,但任何DOM节点也不能同时出现在文档的多个位置。因此在调用appendChild()时传入了父节点的第一个子节点,那么该节点就会成为父节点的最后一个子节点。

//someNode有多个节点

var returnedNode= someNode.appendChild(someNode.firstChild);

alert(retrunedNode== someNode.firstChild);     //true

alert(retrunedNode== some.lastChild);          //false

 

如果需要把节点放在childNodes的某个位置,就可以使用insertBefor()方法。两个参数:要插入的节点和作为参数的节点。插入节点后,被插入的节点会变成参照节点的前一个同胞节点(previousSibling),同时被方法返回。如果参照的节点是null,则insertBefor()与appendChild()执行相同的操作。

//插入后成为最后一个子节点

var retrunedNode= someNode.insertBefor(newNode,null);

alert(newNode ==someNode.lastChild);  //true

 

//插入后成为第一个子节点

var retrunedNode= someNode.insertBefor(newNode,someNode.firstNode);

alert(retrunedNode== newNode);        //true

alert(newNode ==someNode.firstChild);   //true

 

//插入到最后一个子节点前面

var returnedNode= someNode.insertBefor(newNode,someNode.lastChild);

alert(newCode ==someNode.childNodes[someNode.childNodes.length - 2]);  //true

         替换节点:

         replaceChild(要插入的节点,要替换的节点);

         //替换第一个子节点

         varreturnedNode = someNode.replaceChild(newNode,someNode,firstChild);

         该节点的所有关系指针都会从被它替换的节点复制过来,尽管从技术上讲,被替换的节点依然还在文档中,但它在文档中已经没有了自己的位置。

         移除节点:

         removeNode();被移除的节点成为方法的返回值

         //移除第一个子节点

         varformerFirstChild = someNode.removeChild(someNode,firstNode);

 

一.Document类型:

document:文档,document对象是HTMLDocument(继承自Document类型)的一个实例,表示整个HTML页面,而且document对象是 window对象的一个属性。

nodeType:9

nodeName:#document

nodeValue:null

parentNode:null

ownerDocument:null

其子节点可能是一个DocumentType(最多一个)、element(最多一个)、ProcessingInstruction或Comment。

1.Document子节点:

var html = document.documentElement;

var html = document.childNodes[0];

var html = document.firstChild;

document对象还有一个body属性,直接指向<body>元素

var body = document.body;

var doctype = document.doctype;   //取得对<!DOCTYPE>

2.Document信息:

//取得文档标题

var originalTitle = document.title;

//设置文档标题

document.title = “New page title”;

//获取完整的域名

var url = document.URL;

//获取域名

var domain = document.domain;

//获取来源页面的URL

var referrer = document.referrer;

只有domain是可以设置的。

3.查找元素:

document.getElementById();根据ID获取元素

document.getElementByTagName();根据标签名获取元素集合HTMLCollection,HTMLCollection对象有个namedItem(),通过元素的name属相获取集合中的项

document.getElementByName():根据class属性获取元素集合HTMLCollectoin.

特殊集合:

document.anchors:包含文档总带有name特性的<a>元素

document.applets:包含文档总所有的<applet>元素,不推荐使用

document.forms包含文档中所有的<form>元素

document.images:包含文档中所有的<img>元素

document.links:包含文档中所有带href特性的<a>元素

4.DOM一致性的检测:

document.implementation属性提供相应的信息和功能对象,其hasFeature()检测版本信息

var hasXmlDom = document.implementation.hasFeature(“XML”,”1.0”);

 

二.Element类型:

nodeType:1

nodeName:元素的标签名

nodeValue:null

其子节点可能是Element,Text,……

var div = document.getElementById(“div”);

var tagName = div.nodeName;

var tagName = div.tagName;

if(element.tagName == “div”){

         //很容易出错,转换为小写

}

1.HTML元素:

所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性。id、title、…..

获取特性:

document.getAttribute():获取特性

document.setAttribute():设置特性

document.removeAttribute():移除特性

 

2.attributes属性:

Element是使用attributes属性的唯一一个DOM节点类型。attributes属性中包含一个NamedNodeMap,与NodeList类似,也是一个“动态”的集合,元素的每个特性都有一个Attr节点表示,每个节点都保存在NameNodeMap对象中,包含以下方法

getNameItem(name):返回nodeName属性等于name的节点。

removeNamedItem(name):从列表中移除nodeName属性等于name的节点

setNameItem(node):向列表中添加节点,以节点nodeName属性为索引

item(pos):返回位于数字pos位置处的节点

var id = element.attributes.getNamedItem(“id”).nodeValue;

var id = element.attributes[“id”].nodeValue;

3.创建元素

var div = document.createElement(“div”);

在创建新元素的同时,也为新元素设置了ownerDocument属性

document.body.appendChild(div);

将新创建元素添加到<body>元素中

三.Text

nodeType:3

nodeName:#text

nodeValue:节点包含的文本

parentNode:Element

没有子节点

可以通过nodeValue或data属性访问Text节点中包含的文本,对nodeValue的修改在data反映出来

appendData(text):将text添加到节点末尾

deleteData(offset,count):从offset指定位置开始删除count字符

insertData(offset,text):在offset指定的位置插入text

replaceData(offset,count,text):用text替换从offset指定位置开始到offset、count为止的文本

splitText(offset):从offset指定的位置位置将当前文本分成两个文本节点

substringData(offset,count):提取从offset指定位置开始到offset+count为止处的字符串

1.      创建文本节点

document.createTextNode()创建新文本节点

var textNode = document.createTextNode(“<strong>Hello</strong>”);

四.Comment类型:

nodeType:8

nodeName:#comment

nodeValue:注释中的内容

parentNode:Document或Element

 

五.CDATASection类型:

nodeType:4

nodeName:#cdata-sectoin

nodeValue:CDATA区域中的内容

parentNode:可能是Document或Element

没有子节点

 

六.DocumentType类型

nodeType:10

nodeName:docType的名称

nodeValue:null

parentNode:Document

不详述

 

七.DocumentFragment类型

nodeType:11

nodeName:#document-fragment

nodeValue:null

parentNode:null

不详述

 

八.Attr类型

nodeType:11

nodeName:特性名称

nodeValue:特性的值

parentNode:null

 

抱歉!评论已关闭.