最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

求教大神,這樣為什么不能一下子刪除,點(diǎn)一下刪一個(gè)

<!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;i++)

? {

? ? ??

? ? ?content.removeChild(content.childNodes[i]);

? ? ??

? }

}

</script>


<button onclick="clearText()">清除節(jié)點(diǎn)內(nèi)容</button>



正在回答

5 回答

for(var?i=0;i<content.childNodes.length;i++)
??{
??????
?????content.removeChild(content.childNodes[i]);
??????
??}

這是你的代碼,這個(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è)元素,

childNodes?=?["html","php","java"];?//?簡(jiǎn)單舉例

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)有刪除。

怎么改?方法有不少,列舉幾種:

第一種

for(var?i=content.childNodes.length-1;i>=0;i--){
?????var?childNode?=?content.childNodes[i];
?????content.removeChild(childNode);
??}

給 i 賦初值為數(shù)組長(zhǎng)度減一,也就是定位在 childNodes 數(shù)組的最后一個(gè)元素,然后每次循環(huán) i--,從后往前刪,這樣雖然數(shù)組的長(zhǎng)度一直在變化,但前面沒(méi)刪的元素不受影響,下標(biāo)保持不變。

第二種

while?(content.childNodes.length?>?0)?{
????var?childNode?=?content.childNodes[0];
????content.removeChild(childNode);
}

這個(gè)是判斷當(dāng)前 childNodes 數(shù)組中是否還有元素,如果有,就將第一個(gè)刪除,不用去管刪的是什么,也不用管下標(biāo),直到刪光為止。

第三種

while?(content.firstChild)?{
??????var?node?=?content.firstChild;
??????content.removeChild(node);
??}

這和第二種方法類似,不過(guò)將 childNodes[0] 換成了 firstChild,意思一樣的。就是判斷當(dāng)前 content 的第一個(gè)子節(jié)點(diǎn),如果存在,就刪除第一個(gè)子節(jié)點(diǎn),繼續(xù)判斷,當(dāng) firstChild 返回 null,說(shuō)明全部刪除。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

亻亻殊途

講的好明白 多謝
2016-10-13 回復(fù) 有任何疑惑可以回復(fù)我~

上面的答案都沒(méi)告訴你為什么,我看了下,大概懂了點(diǎn),這樣說(shuō)吧,h1元素用1,2,3,4,5表示,空白文本用A,B,C,D,E,F表示,一開(kāi)始排列是這樣的,A1B2C3D4E5F.,然后你點(diǎn)第一次,for第一次循環(huán)刪除了A空白文本,然后i++變成1了,這時(shí)候排列是1B2C3D4E5F,for第二次運(yùn)行刪除了B。第三次for的循環(huán)I=2,排列是12C3D4E5F,全部循環(huán)過(guò)后,排列只剩下12345了??瞻孜谋径紕h除光了,所以你點(diǎn)了一下,for循環(huán)了6次,把空白文本都刪除了,但是你從結(jié)果是看不出來(lái)的。然后當(dāng)你點(diǎn)了第二次,以此類推,就把1,3,5的元素刪除了。第三次點(diǎn)擊刪除了2,第四次點(diǎn)解刪除了4.

2 回復(fù) 有任何疑惑可以回復(fù)我~

for(var i=content.childNodes.length-1;i>=0;i--)

0 回復(fù) 有任何疑惑可以回復(fù)我~

這個(gè)問(wèn)題我也見(jiàn)到了,你的for從大到小循環(huán)for(var i=content.childNodes.length-1;i>=0i--)

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

預(yù)言家小新

為什么一定要從大到小啊???
2016-10-12 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕妹7508549 回復(fù) 預(yù)言家小新

為什么從大到小我不知道,感覺(jué)應(yīng)該是,刪除一個(gè)后觸發(fā)了什么,導(dǎo)致退出了腳本,可能是刪除前一個(gè)node會(huì)引發(fā)界面位移,或者是重新計(jì)算空間,前一個(gè)的刪除會(huì)影響后一個(gè),但后一個(gè)的刪除不會(huì)影響前一個(gè),應(yīng)該就是這個(gè)原因
2016-10-26 回復(fù) 有任何疑惑可以回復(fù)我~

function clearText() {

? var content=document.getElementById("content");

? // 在此完成該函數(shù)

? for(var i=1;i<content.childNodes.length+1;i++)

? {

???? ?

???? content.removeChild(content.childNodes[i]);

???? ?

? }

}

試試看

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

求教大神,這樣為什么不能一下子刪除,點(diǎn)一下刪一個(gè)

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)