為什么一鍵刪除不了呢?
<!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");
? // 在此完成該函數(shù)
? for(var i = 0; i < content.childNodes.length-1; i++){
? ? if(content.childNodes.length>0){
? var ch = content.childNodes[i];
? content.removeChild(ch);?
? ? }
?
? }
??
}
</script>
<button onclick="clearText()">清除節(jié)點內容</button>
</body>
</html>
2016-10-13
這是你的代碼,這個問題其實不難,可能你被繞進去了,一下子沒出的來。
我們這里舉一個簡單的例子來說明一下,假設沒有空白節(jié)點且 childNodes 數(shù)組中只有三個元素,
i = 0 時,childNodes[0] 為 html,被刪除。
但這時,childNodes 數(shù)組發(fā)生了變化,變?yōu)?["php","java"],只剩兩個元素,因為 html 被刪除了。
此時,顯然,childNodes 數(shù)組的 length 也發(fā)生變化,從 3 變?yōu)榱?2。
i++,i = 1,第二次循環(huán)要刪除的是 childNodes[1],也就是 java,而不是 php,php 被留在了數(shù)組中,沒有刪除。
怎么改?方法有不少,列舉幾種:
第一種
給 i 賦初值為數(shù)組長度減一,也就是定位在 childNodes 數(shù)組的最后一個元素,然后每次循環(huán) i--,從后往前刪,這樣雖然數(shù)組的長度一直在變化,但前面沒刪的元素不受影響,下標保持不變。
第二種
這個是判斷當前 childNodes 數(shù)組中是否還有元素,如果有,就將第一個刪除,不用去管刪的是什么,也不用管下標,直到刪光為止。
第三種
這和第二種方法類似,不過將 childNodes[0] 換成了 firstChild,意思一樣的。就是判斷當前 content 的第一個子節(jié)點,如果存在,就刪除第一個子節(jié)點,繼續(xù)判斷,當 firstChild 返回 null,說明全部刪除。
2016-10-13
因為你刪掉的同時,length的長度一直在變到后面i大于length的長度了就不會刪了,for循環(huán)里面的i++刪掉就行了
2016-10-09