javascript中DOM编程

            DOM在javascript中是比较重要的一个模块,它把HTML视为树状结构的元素,我们可以通过一级级的树节点关系来访问它。

            DOMHTML的文档对象模型(Document Object Model),表示文档和访问、操作构成文档的各种元素的应用程序接口(API).它给予开发者空前的对HTML的访问能力,并使开发者能将HTML作为XML文档来处理和查看。DOMHTML视为树状结构的元素,所有元素以及他们的文字和属性可通过DOM树来操作与访问。

 

节点的层次

Document最顶层的节点,所有的其他节点都是附属它的。

Element标识起始标签和结束标签之间的内容,例如<tag></tag><tag />。是唯一可以同时包含特性   

                    和子节点的节点类型。

 

 

NODE接口的属性和方法

 

属性/方法

返回类型

说明

nodeName

String

节点的名字,根据节点的类型而定义

nodeValue

String

节点的值,根据节点的类型而定义

nodeType

Number

节点的类型常量值之一

ownerDocument

Document

指向这个节点所属的文档

firstChild

Node

指向在childNodes中的第一个节点

lastChild

Node

指向在childNodes中的最后一个节点

childNodes

NodeList

所有子节点的列表

previousSibling

Node

指向前一个兄弟节点;如果这个节点就是最后一个兄弟节点,那么该值为null

hasChildNodes()

Boolean

childNodes包含一个或多个节点时,返回真

Attributes

NamedNodeMap

包含了一个元素的特性的attr对象;仅用于Element节点

appendChild

Node

node添加到childNodes的末尾

removeChild

Node

删除node

replaceChild(newnode,oldnode)

Node

替换node,即将oldnode替换成newnode

insertBefore(newnode,refnode)

Node

childNodes中的refnode前插入newnode

 

NodeList:节点数组,按照数组进行索引;用来表示一个元素的子节点。

NamedNodeMap:同时用数值和名字进行索引的节点表;用于表示元素特征。

 

使用DOM

 

eg

 

 1  <html>
2 <head>
3 <title>DOM</title>
4 </head>
5 <body>
6 <p>Hello word</p>
7 <p>DOM Example</p>
8 <p>learning to use the DOM</p>
9 </body>
10 </html>


 

要访问<html />元素,可以使用DocumentdocumentElement属性:

  

var oHtml=document.documentElement;
var ohead=oHtml.firstNodes; 或 var ohead=oHtml.childNodes[0] 或 oHtml.childNodes.item[0]
var obody=oHtml.lastNodes; 或 var ohead=oHtml.childNodes[0] 或 oHtml.childNodes.item[0]


 

 

也可以用 var obody=oHtml.body;

使用childNodes.length属性来获取字节点的数量。

则:

   

 ohead.parentNode=oHtml;
    obody.parentNode=oHtml;
    obody.previousSibling=ohead;
    ohead.nextSibling=obody;
    ohead.owerDocument=document.

 

  

 

 

处理属性

 

          Node接口已具有attributes方法,且已经被所有类型的节点继承,然而,只有Element节点才能有属性,Element节点的ttributes属性起始是NamedNodeMap,它提供一些用于访问和处理其内容的方法:

1.getNamedItem(name)返回nodeName属性值等于name的节点;

2.removeNameItem(name)删除nodeName属性值等于name的节点;

3.setnamedItem(node)node添加到列表中,按其nodeName属性进行索引;

4.item(pos)NodeList一样,返回在位置pos的节点。

 

 

                  NodeNamedMap用于表示属性时,对于每个节点,它的nodeName属性被设置为属性名称,而nodeValue属性被设置为属性的值。

 

Eg:

<p style="color:red" id="p1">hello world</p>

加入变量op包含指向这个元素的一个引用。于是可以这样访问ID属性的值:

   var sid=op.attributes.getnamedItem("id").nodeValue;

  var sid=op.attributes.item(1).nodeValue;

改变id属性:

  op.attributes.getNamedItem("id").nodeValue="newsid";

 

Attr节点也有一个完全等同于nodeValue属性的value属性,并且有name属性和nodeName属性保持同步,一样的,可以通过这些属性进行修改更新:

   getAttribute(name);

   setAttribute(name,newValue);

   removeAttribute(name);

这些方法可以直接处理属性值,完全地隐藏attr节点,所以,通过可通过下面获取前面用的<p />id属性:

Var sid=op.getAttribute("id");

Op.setAttribute("id","newid");

 

访问指定节点

 

1.getElementsByTagName():

          返回一个包含所有的tagName属性等于指定值的元素的NodeList。在Element对象中,tagName属性总是等于小于号之后紧随的名称。如<img/>tagName"img"

 

        var oImags=document.getElementByName("img")    //将所有图形都存放于oImags

        alert(oImags[0].tagName);                      //输出"img"

   获取一个段落下的所有图像:

         var ops=document.getElementsByTagName("p");

         var oImgsIp=ops[0].getElementByTagName("img");

 

  获取document中包含的所有元素:

        var oAllElement=document.getElementsByTagName("*");

 

2.getElementsByName():

         获取所有name属性等于指定值的元素。

                   eg

<script language="javascript">

  function output()

  {

    var oRadios=document.getElementsByName("color");

    alert(oRadios[1].getAttribute("value"));

  }

  </script>

 </HEAD>

 

 <BODY>

  <form method="post">

  <fieldset>

    <legend>请选择你喜欢的颜色:</legend>

<input type="radio" name="color" value="red"/>red<br/>

<input type="radio" name="color" value="green"/>green<br/>

<input type="radio" name="color" value="blue"/>blue<br/>

<input type="submit" onClick="output()">

  </fieldset>

 </BODY>

 

3.getElementsById():

             var odiv1=document.getElementById("div1");

             odiv1.innerText="hello";

 

创建和操作节点

 

  1.创建节点:

    createDocumentFragment()、createElement()和createTextNode();

 

   2.createElement()createTextNode()appendChild()方法:

 

      eg:

           var op=document.createElement("p");

           op.otext=document.createTextNode("hello");

           op.appendChild(otext);

           document.body.appendChild(op);       //将节点添加到文档节点中

   3.removeChild()replaceChild()insertBefore()方法:

        删除指定的节点,参数为要删除的节点。

 

            var op=document.body.getElementsByTagName("p")[0];

            document.body.removeChild(op);    //删除该节点

 

   替换:

 

           var newp=document.createElement("p");

           var newText=document.createTextNode("hello!");

           newp.appendChild(newText);

           var oldp=document.body.getElementsByTagName("p")[0];

           oldp.parentNode.replaceChild(newp,oldp);

 

     插入:

            document.body.insertBefore(newp,oldp);

 

  4.createFragment()

        创建一个文档碎片,当要想document添加大量数据时,将所有的新节点添加到其上,然后把文档碎片内容一次性添加到document中。

     eg

           var arrText=["1","2"…...];

           var oFragment=document.createDocumentFrage();                    //创建文档碎片

           for(var i=0;i<arrText.length;i++)

            {

              var op=document.createElement("p");

   Var otext=document.createTextNode(arrText[i]);

   op.appendChild(otext);

   oFragment.appendChild(op);

            }

 

             Document.body.appendChild(oFragment);

posted @ 2011-08-10 07:57  非著名程序师  阅读(351)  评论(0编辑  收藏  举报