1, 建立節點。
createElement():
var a = document.createElement(“p”);
它建立的是一個元素節點,所以 nodeType 等於 1 。
a.nodeName 將返回 p ;
注意;createElement()方法建立出來的新元素節點不會被自動添加到文檔裡,既然沒添加到文檔裡,說明它還是一個游離的狀態。所以它也沒有nodeParent屬性。
如果想把它添加到文檔裡,可以使用 appendChild()或者insertBefore()方法或者replaceChild()方法。當然我們在前面的例子中,自己寫了一個insertAfter()方法;
比如:
var a = document.createElement(“p”);
document.body.appendChild(a);
注意: appendChild()預設是添加到文檔的最後。也就是lastChild子節點。
如果想添加到某個地方,可以使用insertBefore()。
如果想在元素插入之前給元素添加屬性。可以這麼做:
var a = document.createElement(“p”);
a.setAttribute(“title”,”my demo”);
document.body.appendChild(a);
createTextNode():
var b = document.createTextNode(“my demo”);
它建立的是一個文本節點,所以nodeType等於 3 。
b.nodeName 將返回 #text ;
跟createElement()一樣,用createTextNode()建立的節點也不會自動添加到文檔裡。需要使用appendChild()或者insertBefore()方法或者replaceChild()方法。
他經常與createElement()配合使用,知道為什麼嗎?(一個元素節點,一個文本節點。)
var mes = document.createTextNode(“hello world”);
var container = document.createElement(“p”);
container.appendChild(mes);
document.body.appendChild(container);
2, 複製節點。
cloneNode(boolean) :
它有一個參數。
var mes = document.createTextNode("hello world");
var container = document.createElement("p");
container.appendChild(mes);
document.body.appendChild(container);
var newpara = container.cloneNode(true);//true和false的區別
document.body.appendChild(newpara );
注意:
true的話:是<p>aaaa</p> 複製。
false: 只複製 <p></p> ,裡面的文本不複製。
可以自己寫個例子,然後用 firebug 看看。
複製後的新節點,和createTextNode()一樣 不會被自動插入到文檔 。需要appendChild();
另外還有一個注意: 如果複製後,id一樣,不要忘記用 setAttribute(“id” , “ another_id “);
改變新的節點的ID。
3, 插入節點。
appendChild() :
給元素追加一個子節點, 新的節點 插入到 最後。
var container = document.createElement("p");
var t = document.createTextNode("cssrain");
container.appendChild(t);
document.body.appendChild(container);
他經常跟createElement()和createTextNode(),cloneNode()配合使用。
另外 appendChild()不僅可以用來追加新的元素,也可以你 挪動 文檔中現有的元素。
看下面的例子:
<p id="msg">msg</p>
<p id="content">content</p>
<p id="aaa">aaaaaaaa</p>
<script>
var mes = document.getElementById("msg");
var container = document.getElementById("content");
container.appendChild(mes);
</script>
//發現msg放到 content 後面去了 。
Js內部處理方式:
先把ID為msg的從文檔中刪除,然後再插入到content 後,作為content的最後一個節點。
結果為:
<p id="content">
content
<p id="msg">msg</p>
</p>
<p id="aaa">aaaaaaaa</p>
insertBefore() :
顧名思義,就是把一個新的節點插入到目標節點的前面。
Element.insertBefore( newNode , targerNode );
第二個參數是可選,如果第二個參數不寫,將預設添加到文檔的最後,相當於appendChild();
我們看看insertBefore()怎麼使用:
<div id="cssrian">
<p id="content">1111</p>
<div id="msg">msg<div>test</div></div>
<p id="content">222</p>
<p id="aaa">aaaaaaaa</p>
</div>
<script>
var msg = document.getElementById("msg");
var aaa = document.getElementById("aaa");
var test = document.getElementById("cssrian");
test.insertBefore( msg , aaa );
</script>
// 我們發現ID為msg的 插入到了 aaa的前面。
Js內部處理方式跟 appendChild()相似。
4, 刪除節點。
removeChild() :
<body>
<div id="cssrain">
<div id="a">a </div>
<div id="b">b </div>
<div id="c">c </div>
</div>
</body>
<script>
var msg = document.getElementById("cssrain");
var b = document.getElementById("b");
msg.removeChild(b);
</script>
如果不知道要刪除的節點的父節點是什嗎?可以使用parentNode屬性。
比如:
<body>
<div id="cssrain">
<div id="a">a </div>
<div id="b">b </div>
<div id="c">c </div>
</div>
</body>
<script>
var b = document.getElementById("b");
var c = b.parentNode;
c.removeChild(b);
</script>
注意: 你如果想把某個節點從一處移動到另一個地方,不必使用removeChild()。
可以使用前面的 appendChild()和insertBefore(),他們都會自動先刪除節點,然後移動到你指定的地方。、
5, 替換節點。
Element.repalceChild( newNode , oldNode );
OldNode必須是Element的一個子節點。
<body>
<div id="cssrain">
<div id="a">a </div>
<div id="b">b </div>
<div id="c">c </div>
</div>
</body>
<script>
var cssrain = document.getElementById("cssrain");
var msg = document.getElementById("b");
var para = document.createElement("p");
cssrain.replaceChild( para , msg );
</script>