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

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

看有的同學是正序循環的解法,求大佬解答

for(var i=0;i<content.childNodes.length;i++){
????? if(content.childNodes[i].nodeType!=1){??
???????? continue;?
????? }else{
???????? content.removeChild(content.childNodes[i]);???
????? }
????????
????? }


這個試了下結果,沒問題,不過有個地方想不明白,這個i<content.childNodes.length,這個?content.childNodes.length不是動態變化的嗎,因為每次刪除一個節點,這個content.childNodes.length就變小了,那豈不是沒法遍歷完所有的節點?比如有四個節點,i=0的時候,content.childNodes.length是4, i=1的時候,content.childNodes.length就是3了, i=2的時候,content.childNodes.length就是2了,循環就沒了,最后的節點壓根沒遍歷到呀。

正在回答

5 回答

for(var i=0;i<content.childNodes.length;i++){

? ? ? if(content.childNodes[i].nodeType!=1){

? document.write("當i為:"+i+"&nbsp;");

? document.write("長度為:"+content.childNodes.length+"<br>");

? ? ? ? ?continue;??

? ? ? }else{

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

document.write("當i為:"+i+"&nbsp;");

document.write("長度為:"+content.childNodes.length+"<br>");?

? ? ? }

通過這樣輸出,你就可以看出長度是遞減的,i是遞增的,存在空白節點,刪除一個元素節點,空白節點就會頂上位置。這里最后會留下空白節點(本身這里的if判斷就把空白節點留下了)

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

LouisDuan

實現了,不知道科學不 function clearText() { var content=document.getElementById("content"); // 在此完成該函數 mylength=content.childNodes.length; for (var i=1; i<mylength; i++){ content.removeChild(content.childNodes[i]); }
2019-03-25 回復 有任何疑惑可以回復我~

可以判斷數組長度,重置i=-1,確保再次循環i=0, 進而刪除所有節點;

for(var i=0;i<childNodes.length;i++){

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

? ? ? x=null;

? ? ? if(childNodes.length>0){

? ? ? ? ?// alert(i+"長度"+childNodes.length);

? ? ? ? ? i=-1;

? ? ? }


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

實現了結果,不知道科學不科學

<!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");

? // 在此完成該函數

? mylength=content.childNodes.length;

? for (var i=1; i<mylength; i++){

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

? }

??

}

</script>

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

</body>

</html>


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

你直接試試log就能看出來,如果沒有前面的if條件,實際上是根本遍歷不了所有節點的。如果我猜的沒錯的話,之所以能遍歷,并不是因為i一直是0,而是有空節點,那個length會隔一次減1,不會一直減1.并且如果我這個題目要求的刪除所有的子節點,包括空白節點,那這個答案就是錯的。


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

DP_XL

題目要求的就是空白節點也一并刪除,答案的思維很明確了,因為刪除一次length就會變一次,所以選擇逆序刪除,從最后一個一直刪除到第一個,答案的思路不一定是唯一解,但確實是可讀性強、通用的編程思維,真正到職場上寫這種亂七八糟的代碼,接手項目的人看到都煩
2019-03-30 回復 有任何疑惑可以回復我~

i不會變,i始終是0? 只有content.childNodes.length長度會變

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

慕神0996557 提問者

。。。i不會變?循環里面最后一個是i++,循環每走一次這個就會執行一次的啊。。怎么可能i一直是0
2019-03-14 回復 有任何疑惑可以回復我~
#2

陽火鍋 回復 慕神0996557 提問者

你把循環理解錯了。。 for(var i=0; i< 4 ;i++) 循環格式是這樣沒錯吧。。 我們拆分來理解: i=0 代表從0開始,0只是一個開始條件。。 i<4這個代表循環的一個結束條件。。 i=0他走完循環始終會保持一個初始值進行++.. 意思就是當長度等于3,i還是從0開始加,長度等于2,i還是從0開始加。。 懂不
2019-03-14 回復 有任何疑惑可以回復我~
#3

慕神0996557 提問者 回復 陽火鍋

不太懂,循環進行一次之后i不變為了i+1嗎。
2019-03-14 回復 有任何疑惑可以回復我~
#4

陽火鍋 回復 慕神0996557 提問者

如果初始值i=0 循環一次i+1,i<4 那你告訴我i是不是加到3就退出循環了。。 好那么如果i<3。。 那么i還是從0開始加到2。。 反正不管長度是多少,i始終只會從0開始加。。因為你一開始設定的就是0。。i自身不做累加
2019-03-15 回復 有任何疑惑可以回復我~
#5

慕神0996557 提問者 回復 陽火鍋

大兄弟,很感謝你的回答。。不過我覺得你說的應該是錯的。for循環一單進去之后,就只會開始進行i=i+1,然后再判斷新的i是否滿足條件,那個初始值是0,只會用第一次,你的意思我明白,你說的是,里面那個判斷條件每次都變了,所以跟著循環也變了,又是從0開始加。我自己在谷歌控制臺試了下,這里發不了圖,看下面,直接log出i就看的出來
2019-03-15 回復 有任何疑惑可以回復我~
#6

DP_XL 回復 陽火鍋

你怕是對for循環本身就有什么誤解吧?i=0只會執行一次,而且是在for循環開始的時候執行,然后進行判斷,如果判斷成功就執行循環代碼,然后i++,然后再執行判斷,我雖然不是很懂JS,但是在c,c++,java里面都是這樣,我并不覺得js會獨特對一模一樣的寫法有不同的解釋
2019-03-30 回復 有任何疑惑可以回復我~
#7

神志不清H

i會變的吧,每刪除一個節點length都會-1,i會+1吧我認為
2019-04-03 回復 有任何疑惑可以回復我~
查看4條回復

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       468836    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

看有的同學是正序循環的解法,求大佬解答

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

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

幫助反饋 APP下載

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

公眾號

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