求教大神,這樣為什么不能一下子刪除,點一下刪一個
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標(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;i++)
? {
? ? ??
? ? ?content.removeChild(content.childNodes[i]);
? ? ??
? }
}
</script>
<button onclick="clearText()">清除節(jié)點內(nèi)容</button>
2016-10-13
這是你的代碼,這個問題其實不難,可能你被繞進(jìn)去了,一下子沒出的來。
我們這里舉一個簡單的例子來說明一下,假設(shè)沒有空白節(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ù)組的長度一直在變化,但前面沒刪的元素不受影響,下標(biāo)保持不變。
第二種
這個是判斷當(dāng)前 childNodes 數(shù)組中是否還有元素,如果有,就將第一個刪除,不用去管刪的是什么,也不用管下標(biāo),直到刪光為止。
第三種
這和第二種方法類似,不過將 childNodes[0] 換成了 firstChild,意思一樣的。就是判斷當(dāng)前 content 的第一個子節(jié)點,如果存在,就刪除第一個子節(jié)點,繼續(xù)判斷,當(dāng) firstChild 返回 null,說明全部刪除。
2016-10-08
上面的答案都沒告訴你為什么,我看了下,大概懂了點,這樣說吧,h1元素用1,2,3,4,5表示,空白文本用A,B,C,D,E,F表示,一開始排列是這樣的,A1B2C3D4E5F.,然后你點第一次,for第一次循環(huán)刪除了A空白文本,然后i++變成1了,這時候排列是1B2C3D4E5F,for第二次運(yùn)行刪除了B。第三次for的循環(huán)I=2,排列是12C3D4E5F,全部循環(huán)過后,排列只剩下12345了??瞻孜谋径紕h除光了,所以你點了一下,for循環(huán)了6次,把空白文本都刪除了,但是你從結(jié)果是看不出來的。然后當(dāng)你點了第二次,以此類推,就把1,3,5的元素刪除了。第三次點擊刪除了2,第四次點解刪除了4.
2016-09-24
for(var i=content.childNodes.length-1;i>=0;i--)
2016-09-24
這個問題我也見到了,你的for從大到小循環(huán)for(var i=content.childNodes.length-1;i>=0i--)
2016-09-24
function clearText() {
? var content=document.getElementById("content");
? // 在此完成該函數(shù)
? for(var i=1;i<content.childNodes.length+1;i++)
? {
???? ?
???? content.removeChild(content.childNodes[i]);
???? ?
? }
}
試試看