為什么一鍵刪除不了呢?
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無(wú)標(biāo)題文檔</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é)點(diǎn)內(nèi)容</button>
</body>
</html>
2016-10-13
這是你的代碼,這個(gè)問(wèn)題其實(shí)不難,可能你被繞進(jìn)去了,一下子沒(méi)出的來(lái)。
我們這里舉一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明一下,假設(shè)沒(méi)有空白節(jié)點(diǎn)且 childNodes 數(shù)組中只有三個(gè)元素,
i = 0 時(shí),childNodes[0] 為 html,被刪除。
但這時(shí),childNodes 數(shù)組發(fā)生了變化,變?yōu)?["php","java"],只剩兩個(gè)元素,因?yàn)?html 被刪除了。
此時(shí),顯然,childNodes 數(shù)組的 length 也發(fā)生變化,從 3 變?yōu)榱?2。
i++,i = 1,第二次循環(huán)要?jiǎng)h除的是 childNodes[1],也就是 java,而不是 php,php 被留在了數(shù)組中,沒(méi)有刪除。
怎么改?方法有不少,列舉幾種:
第一種
給 i 賦初值為數(shù)組長(zhǎng)度減一,也就是定位在 childNodes 數(shù)組的最后一個(gè)元素,然后每次循環(huán) i--,從后往前刪,這樣雖然數(shù)組的長(zhǎng)度一直在變化,但前面沒(méi)刪的元素不受影響,下標(biāo)保持不變。
第二種
這個(gè)是判斷當(dāng)前 childNodes 數(shù)組中是否還有元素,如果有,就將第一個(gè)刪除,不用去管刪的是什么,也不用管下標(biāo),直到刪光為止。
第三種
這和第二種方法類(lèi)似,不過(guò)將 childNodes[0] 換成了 firstChild,意思一樣的。就是判斷當(dāng)前 content 的第一個(gè)子節(jié)點(diǎn),如果存在,就刪除第一個(gè)子節(jié)點(diǎn),繼續(xù)判斷,當(dāng) firstChild 返回 null,說(shuō)明全部刪除。
2016-10-13
因?yàn)槟銊h掉的同時(shí),length的長(zhǎng)度一直在變到后面i大于length的長(zhǎng)度了就不會(huì)刪了,for循環(huán)里面的i++刪掉就行了
2016-10-09