removeChild 刪除節點問題
我的作業中想打印出已刪除內容,但用教程中的辦法不行。具體代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標題文檔</title>
</head>
<body>
<div id="content">
? <h1>html</h1>
? <h1>php</h1>
? <h1>javascript</h1>
? <h1>jquery</h1>
? <h1>java</h1>
</div>
<script type="text/javascript">
function clearText() {
? var content=document.getElementById("content");
? // 在此完成該函數
for(var i=0;i<content.childNodes.length;i++){
? ? var n = content.childNodes[i];
? ? }
? ? var d =content.removeChild(n);
? ? document.write("刪除的節點是:" + d.innerHTML);
}
</script>
<button onclick="clearText()">清除節點內容</button>
</body>
</html>
==================================
只有把document.write("刪除的節點是:" + d.innerHTML);這句中的d 改成content也就是改成原來的節點名稱才可以打出,結果雖然正確,但那個是原節點,不是現在已刪除的,不知這是怎么回事?謝謝。
2016-03-15
因為源節點刪除了,但是他只是不存在DOM樹種了,但是還存在內存中,所以刪除節點之后再把刪除節點賦值為null
2016-03-23
你的這句for(var i=0;i<content.childNodes.length;i++){? var n = content.childNodes[i];?} ?執行完了后只能獲取到content最后一個子節點并放入n中,應該并不是你所希望的。應該把右括號“}”放到document.write("刪除的節點是:" + d.innerHTML);這句的后面。這樣你后面寫的用d來接收刪除的節點,再把d.innerHTML打出,就沒有錯,而不用改掉d,打出的就是已刪除但是還存在內存d中的content的子節點了。
改完后原理上沒錯,但是因為瀏覽器兼容問題,會將空白處當作文本節點,所以你那樣寫實現不了一次都刪除。至于如何再改進,建議你看下這個http://www.xianlaiwan.cn/qadetail/56371?解釋得挺詳細的,我就不多說了。
希望對你用幫助。
2016-03-15
謝謝你的回答。但我不是想把內存中的數據刪除,而是想把它打印出來,就是把已刪除的項目打印出來,不知如何寫。