亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

怎么點擊第一下沒有反應,然后再點擊一下刪除了3個,然后再點擊依次刪除一個

<!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(i=0;i<content.childNodes.length;i++)

? {

? ? ? var x=content.removeChild(content.childNodes[i]);

? ? ? x=null;

? }

}

</script>

<button onclick="clearText()">清除節點內容</button>


正在回答

47 回答

我發現問題在于for循環里面的i值的變化,不是應該++,而是應該--;你們談論了那么久,<script type="text/javascript">
function clearText() {
? var content=document.getElementById("content");
? // 在此完成該函數
? var o = content.childNodes.length;
? var i=0
? for(i = 1; i<o; i--){
????? content.removeChild(content.childNodes[i]);
? }
}
</script>

這樣問題就搞定了

2 回復 有任何疑惑可以回復我~
#1

空山驪語

嗯嗯,還是你這個方法有效
2016-05-17 回復 有任何疑惑可以回復我~
#2

米蟲懶得聰明

這個辦法就是一直讓childNodes[]它里邊一直保持是【0】,,,和置頂的其實是一個意思。
2016-07-04 回復 有任何疑惑可以回復我~
#3

在天一涯

為什么FOR里面I初始賦值為1
2018-02-12 回復 有任何疑惑可以回復我~

還有這個啊 高大上

0 回復 有任何疑惑可以回復我~

length不斷改變,子節點的數組也在改變

0 回復 有任何疑惑可以回復我~

呵呵,,,

0 回復 有任何疑惑可以回復我~

給老師點贊 很清晰的講解

0 回復 有任何疑惑可以回復我~

厲害,原來content.childNodes.length是個變量了!

0 回復 有任何疑惑可以回復我~

棒棒的!

0 回復 有任何疑惑可以回復我~

理解這個問題!看完置頂回答后再做個試驗就一目了然!在每個空白處,原來不是沒有文本么,自己輸入文本,比如依次1-6!這時就會發現第一次點擊按鈕刪除的是1-6這6個數字,然后再點擊才刪除的是前3個!對于第二次只是刪除了前三個,就是樓上的置頂解釋,因為動態變化。

function?clearText()?{
??var?content=document.getElementById("content");
??//?在此完成該函數?
??var?childnode=content.childNodes;
??var?num=childnode.length;?
??//document.write(num);
??for(var?i=0;i<num;i++){
??????content.removeChild(childnode[i]);?
??}
}

這里再說明一下為何刪除1-6!我的代碼中childnode=content.childNodes,這里childnode其實是c++中引用的意思,也就是他只是別名,是沒有內存空間的,與下面的num=childnode.length不同,這個num是不會再隨著節點的動態變化而變化了,因為他有自己的空間,且空間中存儲了相應的值,你不去做變動,它是不會變化的。而前面的childnode由于是引用,也就是他本質是content.childNodes的值,是動態變化的,也就是這里的子節點在動態變化!這樣子節點每次刪除一次后前移1個,i又加1剛好就是全部刪除的都是文本,也就是我這里加入的1-6!

至于刪到6循環停止了,那就是再往后循環在繼續,已經沒有可以刪除的東西了,所以看到的效果是只刪除到最后一個文本了,但實際循環還是做滿了11次停止,之后后面沒內容了!

說了這么多,就這樣吧!再多說自己也暈了,按規范搞法就行,想這么多沒有意義!

32 回復 有任何疑惑可以回復我~
#1

qq_紫牛_1

這個代碼運行之后還是不能一次全部刪除啊
2016-01-27 回復 有任何疑惑可以回復我~
#2

prettywinter 回復 qq_紫牛_1

function clearText() { var content=document.getElementById("content"); // 在此完成該函數 var childnode=content.childNodes; var num=childnode.length; //document.write(num); for(var i=0;i<num;i++){ content.removeChild(childnode[0]); } }
2016-02-17 回復 有任何疑惑可以回復我~
#3

逃離星球 回復 prettywinter

請問為什么應該content.removeChild(childnode[0]); 而不是content.removeChild(childnode[i]); 0和i搞不懂啊啊
2016-04-05 回復 有任何疑惑可以回復我~
#4

空山驪語 回復 qq_紫牛_1

我也是
2016-05-17 回復 有任何疑惑可以回復我~
#5

素本往后

不太明白,為什么都是循環前存了變量的值,為什么num有自己的空間而childNode沒有
2016-12-03 回復 有任何疑惑可以回復我~
#6

qq_四月天_10 回復 逃離星球

因為循環一次刪除一個后,下一次循環原來位置1就就變為位置為0的元素了。這樣每次刪除content.removeChild(childnodes[0]),循環完畢就都刪除了,就實現了一次性刪除。 如果設為i,由于每次數組變化,實際就無法刪除所有子節點。
2017-02-10 回復 有任何疑惑可以回復我~
#7

于Sir_

太棒了 完全講清楚因為動態的原因導致 而放在外邊就變為靜態
2017-05-25 回復 有任何疑惑可以回復我~
#8

慕仙8142370 回復 逃離星球

我的理解,類似于堆棧,我們從上到下排列,最底下那個元素是n[0],依次往上是n[1]、n[2],當刪除了n[0],相當于把最底下那個抽走了,那倒數第二個n[1]就降到最底下,變成了n[0],所以每次刪除的是n[0]的時候,能保證一直刪到最后一個。
2018-01-15 回復 有任何疑惑可以回復我~
查看5條回復

到時候學JQ之后,寫法會變得好高大上。一句搞定

0 回復 有任何疑惑可以回復我~

自己想了半天,原來是這個問題! ?回答的非常詳細,非常有幫助! 非常感謝

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

怎么點擊第一下沒有反應,然后再點擊一下刪除了3個,然后再點擊依次刪除一個

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號