1. 程式人生 > >javascript 操作 HTML DOM

javascript 操作 HTML DOM

出處:http://blog.csdn.net/qij2256/archive/2007/04/20/1572890.aspx

 主要概述一些有用的基礎的DOM的方法以及怎樣用使用javascript使用它們。 可以實現比如動態地新建控制移動HTML元素。
Document 物件的常用方法 1getElementById(id) 通過元素的ID訪問元素,這是DOM一個基礎的訪問頁面元素的方法,我們要經常用到它. 例如下面的例子,我們可以同DIV的ID迅速的訪問到它,而不必通過DOM層層遍歷,

<body> 
<div id=’divid’><p>h</p> 
Just for testing; 
</div> 
<div id=’divid’> 

Just for testing; 
</div> 
<script> 
 var div=document.getElementById(‘divid’); 
 alert(div.nodeName);
</script> 
</body> 
注意使用這個函式時如果元素的ID不是唯一的,那麼會獲得第一個符合條件的元素。 
在IE6中如果input、checkbox,radio. 等元素name匹配指定的ID,也會被訪問到 
例如下面的例子中,獲得的元素是input: 
<body> 
 <input name='divid' type="text"/> 
 <div id='divid'>
    Just for testing; 
 </div> 
<script> 
   var div=document.getElementById('divid'); 
   alert(div.nodeName); 
</script> 
</body>
2getElementsByName(name) 
返回名字是name的元素陣列,在IE6中元素ID匹配這個名字的話,這個元素也將包括在內,而且getElementsByName()僅用於象input,radio,checkbox等元素物件。 
象下面例子中georges陣列的長度應該是0。 
<body> 
<div name="george">f</div> 
<div name="george">f</div> 
<script type="text/javascript"> 
var georges=document.getElementsByName("george"); 
alert(georges.length); 
</script> 
</body> 
3、getElementsByTagName(tagname) 
getElementByTagName可以用於DOCUMENT也可以用元素。getElementsByTagName返回具有指定tagname的子元素列表(陣列)。你可以遍歷這個陣列獲得每一個單獨的子元素。當處理很大的DOM結構,使用這種方法可以很容易的所有縮小範圍。 
<html> 
<head> 
<title></title> 
<script> 
    function start() { 
        // 獲得所有tagName是body的元素(當然每個頁面只有一個)          
       myDocumentElements=document.getElementsByTagName("body"); 
       myBody=myDocumentElements.item(0); 
        // 獲得body子元素種的所有P元素 
        myBodyElements=myBody.getElementsByTagName("p");
        // 獲得第二個P元素
        myP=myBodyElements.item(1); 
       //顯示這個元素的文字 
        alert(myP.firstChild.nodeValue); 
    } 
</script> 
</head> 
<body onload="start()"> 
<p>hi</p> 
<p>hello</p> 
</body> 
</html>

DOM Element 常用方法1、appendChild(node) 
向當前節點物件的追加節點。經常用於給頁面動態的新增內容。 例如下面給div新增一個文字節點: <div id="test"></div> <script type="text/javascript"> var newdiv=document.createElement("div") var newtext=document.createTextNode("A new div") newdiv.appendChild(newtext) document.getElementById("test").appendChild(newdiv) </script> 上面的例子中給DIV新增文字,也可以用newdiv.innerHTML=”A new div”實現, 不過innerHTML不屬於DOM 2、removeChild(childreference) 
移除當前節點的子節點,返回被移除的節點。這個被移除的節點可以被插入document樹中別的地方 <div id="father"><div id="child">A child</div></div> <script type="text/javascript"> var childnode=document.getElementById("child") var removednode=document.getElementById("father").removeChild(childnode) </script> 3、cloneNode(deepBoolean) 複製並返回當前節點的複製節點,這個複製得到的節點是一個孤立的節點,不在document樹中。複製原來節點的屬性值,包括ID屬性,所以在把這個新節點加到document之前,一定要修改ID屬性,以便使它保持唯一。當然如果ID的唯一性不重要可以不做處理。 這個方法支援一個布林引數,當deepBoolean設定true時,複製 當前節點的所有子節點,包括該節點內的文字。 <p id=”mypara”>11111</p> p=document.getElementById("mypara") pclone = p.cloneNode(true); p.parentNode.appendChild(pclone); <div id="adiv"><span id="innerspan">span</span></div> <script type="text/javascript"> var oldel=document.getElementById("innerspan"); var newel=document.createElement("p"); var text=document.createTextNode(“ppppp”); newel.appendChild(text); document.getElementById("adiv").replaceChild(newel, oldel); </script>
5、insertBefore(newElement, targetElement) 
給當前節點插入一個新節點,如果targetElement被設定為null,那新節點被當作最後一個子節點插入,否則那新節點應該被插入targetElement之前的最近位置。 <body> <span id="lovespan">熊掌我所欲也!</span> </body> <script type="text/javascript"> var lovespan=document.getElementById("lovespan") var newspan=document.createElement("span") var newspanref=document.body.insertBefore(newspan, lovespan) newspanref.innerHTML="魚與"; </script> <script> function wow() {  alert("我好象沒有點滑鼠啊"); } </script> <div id="test" onclick='wow()'>hhh</div> <script type="text/javascript">  var div = document.getElementById("test"); div.click(); </script> DOM Element的屬性:(下面是常用的。IE5.0以上,mozllia都支援的) 1、childeNodes  返回所有子節點物件, 例如 <table id="mylist"> <tr><td>一個和尚有水喝。</td></tr> <tr><td>兩個和尚挑水喝。</td></tr> <tr><td>三個和尚沒水喝。</td></tr> </table> <script> var msg=”” var mylist=document.getElementById("mylist") for (i=0; i<mylist.childNodes.length; i++){    var tr=mylist.childNodes[i];    for(j=0;j<tr.childNodes[j].length; j++) {       var td=tr.childNodes[j];       msg+=td.innerText;    } } alert(msg); </script> 2、innerHTML 
這是一個事實上的標準,不屬於w3c DOM,但是幾乎所有支援DOM的瀏覽器,都支援這個屬性。通過這個屬性我們很容易修改一個元素的HTML。 <p><b>新人類,什麼?!</b></p> <script type="text/javascript"> window.onload=function(){ document.getElementsByTagName("p")[0].innerHTML="<b>新新人類,什麼?!</b>" } </script> 3、style 
返回一個元素的style物件的引用,通過它我們可以獲得並修改每個單獨的樣式。 例如下面的指令碼可以修改一個元素的背景色 document.getElementById("test").style.backgroundColor="yellow" 4、firstChild 返回第一個子節點
5、lastChild 返回最後一個子節點
6、parentNode 返回父節點的物件。
7、nextSibling 返回下一個兄弟節點的物件
8、previousSibling 返回前一個兄弟節點的物件
9、nodeName 返回節點的HTML標記名稱,使用英文的大寫字母,如P, FONT 例如 <div id='test'>ddd</div> <script> if (document.getElementById("test").nodeName=="DIV")    alert("This is a DIV"); </script> 第一個例子:使用DOM1.0的javascript動態地建立一個HTML table。 
<head> <title>Sample code </title> <script>     function start() {         //獲得body的引用         var mybody=document.getElementsByTagName("body").item(0);         //建立一個<table></table>元素         mytable = document.createElement("TABLE");         //建立一個<TBODY></TBODY>元素         mytablebody = document.createElement("TBODY");         // 建立行列         for(j=0;j<3;j++) { //建立一個<TR></TR>元素             mycurrent_row=document.createElement("TR");             for(i=0;i<3;i++) {     //建立一個<TD></TD>元素                 mycurrent_cell=document.createElement("TD"); //建立一個文字元素                 currenttext=document.createTextNode("cell is row "+j+", column "+i);                 //把新的文字元素新增到單元TD上                 mycurrent_cell.appendChild(currenttext);                 // appends the cell TD into the row TR                 //把單元TD新增到行TR上
                mycurrent_row.appendChild(mycurrent_cell);             } //把行TR新增到TBODY上             mytablebody.appendChild(mycurrent_row);         }         // 把 TBODY 新增到 TABLE         mytable.appendChild(mytablebody);         // 把 TABLE 新增到 BODY         mybody.appendChild(mytable);         // 把mytable的border 屬性設定為2         mytable.setAttribute("border","2");     } </script> </head> <body onload="start()"> </body> </html> 接著,使用一個迴圈建立TR元素,它們應該是TBODY元素的子元素。 對於每一個TR,我們使用一個迴圈建立TD元素,它們是TR的子元素。 對於每一個TD,我們建立一個文字節點元素 現在,我們建立好了這些TABLE, TBODY, TR, TD還有文字元素,但是它們之間的層級 關係並沒有建立起來。然後我們以上相反的順序把每一個物件新增到它的父節點上。 mycurrent_cell.appendChild(currenttext); mycurrent_row.appendChild(mycurrent_cell); mytablebody.appendChild(mycurrent_row); mytable.appendChild(mytablebody); 現在DOM層次如下:                     BODY                       |                    TABLE                       |                    TBODY                       |       TR-------------------TR------------------TR        |               |              | TD-----TD-----TD TD-----TD-----TD TD-----TD-----TD   首先,我們建立一個table元素
接著,建立一個TBODY元素,它應該是TABLE元素的子元素,
但是現在現在它們之間沒有聯絡。 6、click() 
執行元素的一次點選,可以用於通過指令碼來觸發onClick函式 4、replaceChild(newChild, oldChild) 
把當前節點的一個子節點換成另一個節點
例如: