Javascript添加節(jié)點
上節(jié)中,我們講解了如何創(chuàng)建新節(jié)點。創(chuàng)建的新節(jié)點如果想發(fā)揮作用,必需添加到DOM(HTML文檔)。
Javascript提供了兩種添加節(jié)點的方法:
insertBefore()
insertBefore() 方法可以在指定節(jié)點的前面插入新節(jié)點。
語法:
parentNode.insertBefore(newNode , thisNode)
參數(shù)/返回值說明:
例如,在 id="dome" 的節(jié)點前面添加節(jié)點的語句為:
var ele_div=document.createElement("div"); var thisNode=document.getElementById("demo"); this.parentNode.insertBefore(ele_div , thisNode);
注意:insertBefore() 是當前節(jié)點的父節(jié)點的一個方法,添加節(jié)點時,不但要知道當前節(jié)點,還要知道當前節(jié)點的父節(jié)點。一般情況下,可以通過 thisNode.parentNode 來獲取父節(jié)點。
舉例,在指定節(jié)點前面不斷增加新節(jié)點:
<div id="demo"> <div id="thisNode">點擊這里添加新節(jié)點</div> </div> <script type="text/javascript"> document.getElementById("thisNode").onclick=function(){ var ele_div=document.createElement("div"); var ele_text=document.createTextNode("這是新節(jié)點"); ele_div.appendChild(ele_text); this.parentNode.insertBefore(ele_div , this); } </script>
appendChild()
appendChild() 可以向指定節(jié)點添加新的子節(jié)點,并將添加的節(jié)點放在最后。
語法:
parentNode.appendChild(newNode)
參數(shù)/返回值說明:
例如,向 id="dome" 的節(jié)點添加子節(jié)點的語句為:
var ele_div=document.createElement("div"); var ele_parent=document.getElementById("demo"); ele_parent.appendChild(ele_div);
舉例,為指定節(jié)點不斷添加新節(jié)點:
<div id="demo"> <div id="thisNode">點擊添加新節(jié)點</div> </div> <script type="text/javascript"> document.getElementById("demo").onclick=function(){ var ele_div=document.createElement("div"); var ele_text=document.createTextNode("這是新節(jié)點 "); ele_div.appendChild(ele_text); this.appendChild(ele_div); } </script>
遺憾的是,Javascript沒有提供在指定節(jié)點的后面插入節(jié)點的方法,也沒有提供在指定節(jié)點的前面插入子節(jié)點的方法。
不過,我們可以使用現(xiàn)有的方法來實現(xiàn)。下面給出兩個自定義的函數(shù)。
/** * func insertAfert 在指定節(jié)點的后面插入節(jié)點 * pram newNode 要添加的新節(jié)點 * pram thisNode 當前節(jié)點(指定節(jié)點) **/ function insertAfter(newNode, thisNode){ var parent = thisNode.parentNode; if (parent.lastChild == thisNode) { // 如果父節(jié)點的最后一個節(jié)點是指定節(jié)點,則直接添加 parent.appendChild(newNode); }else { parent.insertBefore(newNode , thisNode.nextSibling); //如果不是,則在指定節(jié)點的下一個節(jié)點前面插入 } } /** * func appendChildPre 在指定節(jié)點的前面插入子節(jié)點 * pram parent 父節(jié)點 * pram newNode 要添加的新節(jié)點 **/ function appendChildPre(parent , newNode){ if(parent.length>=1){ // 如果存在子節(jié)點,則在第一個子節(jié)點的前面添加 parent.insertBefore(newNode , parent.firstNode); }else{ // 如果不存在,則在最后添加 parent.appendChild(newNode); } }